01 /*
02 * Copyright 2008-2014 the original author or authors.
03 *
04 * Licensed under the Apache License, Version 2.0 (the "License");
05 * you may not use this file except in compliance with the License.
06 * You may obtain a copy of the License at
07 *
08 * http://www.apache.org/licenses/LICENSE-2.0
09 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package griffon.core;
17
18 import griffon.core.injection.Binding;
19
20 import javax.annotation.Nonnull;
21 import java.lang.annotation.Annotation;
22
23 /**
24 * @author Andres Almiray
25 * @since 2.0.0
26 */
27 public interface ApplicationBootstrapper {
28 void bootstrap() throws Exception;
29
30 void run();
31
32 public static class Key {
33 private final Class<?> source;
34 private final Class<? extends Annotation> annotationType;
35 private Annotation annotation;
36
37 private Key(@Nonnull Class<?> source, @Nonnull Annotation annotation) {
38 this.source = source;
39 this.annotation = annotation;
40 this.annotationType = annotation.getClass();
41 }
42
43 private Key(@Nonnull Class<?> source, @Nonnull Class<? extends Annotation> annotationType) {
44 this.source = source;
45 this.annotationType = annotationType;
46 }
47
48 @Override
49 public boolean equals(Object o) {
50 if (this == o) return true;
51 if (o == null || getClass() != o.getClass()) return false;
52
53 ApplicationBootstrapper.Key key = (ApplicationBootstrapper.Key) o;
54
55 if (annotation != null) {
56 return source.equals(key.source) && annotation.equals(key.annotation);
57 }
58
59 return source.equals(key.source) &&
60 !(annotationType != null ? !annotationType.equals(key.annotationType) : key.annotationType != null);
61 }
62
63 @Override
64 public int hashCode() {
65 int result = source.hashCode();
66 if (annotation != null) {
67 result = 31 * result + annotation.hashCode();
68 } else {
69 result = 31 * result + (annotationType != null ? annotationType.hashCode() : 0);
70 }
71 return result;
72 }
73
74 @Override
75 public String toString() {
76 final StringBuilder sb = new StringBuilder("Key{");
77 sb.append("source=").append(source);
78 sb.append(", annotation=").append(annotation);
79 sb.append(", annotationType=").append(annotationType);
80 sb.append('}');
81 return sb.toString();
82 }
83
84 @Nonnull
85 @SuppressWarnings("ConstantConditions")
86 public static ApplicationBootstrapper.Key of(Binding<?> binding) {
87 return binding.getClassifier() != null ? new ApplicationBootstrapper.Key(binding.getSource(), binding.getClassifier()) :
88 new ApplicationBootstrapper.Key(binding.getSource(), binding.getClassifierType());
89 }
90 }
91 }
|