1 package com.atlassian.plugins.codegen;
2
3 import com.atlassian.fugue.Option;
4
5 import com.google.common.collect.ImmutableList;
6
7 import static com.atlassian.plugins.codegen.ClassId.fullyQualified;
8 import static com.atlassian.fugue.Option.none;
9 import static com.google.common.base.Preconditions.checkNotNull;
10
11
12
13
14 public final class ComponentImport implements PluginProjectChange
15 {
16 private final ClassId interfaceClass;
17 private final Option<String> key;
18 private final Option<String> filter;
19 private final ImmutableList<ClassId> alternateInterfaces;
20
21 public static ComponentImport componentImport(ClassId interfaceClass)
22 {
23 return new ComponentImport(interfaceClass, none(String.class), none(String.class), ImmutableList.<ClassId>of());
24 }
25
26 public static ComponentImport componentImport(String fullyQualifiedInterfaceName)
27 {
28 return new ComponentImport(fullyQualified(fullyQualifiedInterfaceName), none(String.class), none(String.class), ImmutableList.<ClassId>of());
29 }
30
31 private ComponentImport(ClassId interfaceClass, Option<String> key, Option<String> filter, ImmutableList<ClassId> alternateInterfaces)
32 {
33 this.interfaceClass = checkNotNull(interfaceClass, "interfaceClass");
34 this.key = checkNotNull(key, "key");
35 this.filter = checkNotNull(filter, "filter");
36 this.alternateInterfaces = checkNotNull(alternateInterfaces, "alternateInterfaces");
37 }
38
39 public ComponentImport key(Option<String> key)
40 {
41 return new ComponentImport(this.interfaceClass, key, this.filter, this.alternateInterfaces);
42 }
43
44 public ComponentImport filter(Option<String> filter)
45 {
46 return new ComponentImport(this.interfaceClass, this.key, filter, this.alternateInterfaces);
47 }
48
49 public ComponentImport alternateInterfaces(ClassId... interfaceClasses)
50 {
51 return new ComponentImport(this.interfaceClass, this.key, this.filter, ImmutableList.copyOf(interfaceClasses));
52 }
53
54 public ClassId getInterfaceClass()
55 {
56 return interfaceClass;
57 }
58
59 public Option<String> getKey()
60 {
61 return key;
62 }
63
64 public Option<String> getFilter()
65 {
66 return filter;
67 }
68
69 public Iterable<ClassId> getAlternateInterfaces()
70 {
71 return alternateInterfaces;
72 }
73
74 @Override
75 public String toString()
76 {
77 return "[component-import: " + interfaceClass + "]";
78 }
79 }