View Javadoc
1   /**
2    * Copyright (c) 2012-2014, jcabi.com
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met: 1) Redistributions of source code must retain the above
8    * copyright notice, this list of conditions and the following
9    * disclaimer. 2) Redistributions in binary form must reproduce the above
10   * copyright notice, this list of conditions and the following
11   * disclaimer in the documentation and/or other materials provided
12   * with the distribution. 3) Neither the name of the jcabi.com nor
13   * the names of its contributors may be used to endorse or promote
14   * products derived from this software without specific prior written
15   * permission.
16   *
17   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21   * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28   * OF THE POSSIBILITY OF SUCH DAMAGE.
29   */
30  package com.jcabi.beanstalk.maven.plugin;
31  
32  import com.amazonaws.services.elasticbeanstalk.model.S3Location;
33  import com.jcabi.aspects.Loggable;
34  import javax.validation.constraints.NotNull;
35  import lombok.EqualsAndHashCode;
36  import lombok.ToString;
37  
38  /**
39   * Bundle with a WAR application.
40   *
41   * @author Yegor Bugayenko (yegor@tpc2.com)
42   * @version $Id$
43   * @since 0.3
44   */
45  interface Bundle {
46  
47      /**
48       * Name of this version to use.
49       * @return The name
50       */
51      String name();
52  
53      /**
54       * Get S3 location of an app.
55       * @return The location
56       */
57      S3Location location();
58  
59      /**
60       * Get MD5 ETag hex of the bundle, according to RFC-1864.
61       * @return The ETag
62       * @since 0.7.1
63       */
64      String etag();
65  
66      /**
67       * Safe bundle, with a safe name.
68       */
69      @ToString
70      @EqualsAndHashCode(of = "origin")
71      @Loggable(Loggable.DEBUG)
72      final class Safe implements Bundle {
73          /**
74           * Original bundle.
75           */
76          private final transient Bundle origin;
77          /**
78           * Public ctor.
79           * @param bundle Original bundle
80           */
81          public Safe(@NotNull final Bundle bundle) {
82              this.origin = bundle;
83          }
84          /**
85           * {@inheritDoc}
86           */
87          @Override
88          public String name() {
89              return this.origin.name().replace("/", "_");
90          }
91          /**
92           * {@inheritDoc}
93           */
94          @Override
95          public S3Location location() {
96              return this.origin.location();
97          }
98          /**
99           * {@inheritDoc}
100          */
101         @Override
102         public String etag() {
103             return this.origin.etag();
104         }
105     }
106 
107 }