00001
00058 package com.arcle.rmt.j2se.swing.vc.rqml;
00059
00060 import java.util.Map;
00061 import java.util.Hashtable;
00062 import java.lang.ref.SoftReference;
00063
00064 import com.arcle.rmt.rqml.RQMLFirstClass;
00065 import com.arcle.rmt.rqml.Requirement;
00066 import com.arcle.rmt.rqml.Stakeholder;
00067 import com.arcle.rmt.rqml.Issue;
00068 import com.arcle.rmt.rqml.Assumption;
00069 import com.arcle.rmt.rqml.Taxonomy;
00070 import com.arcle.rmt.rqml.Context;
00071 import com.arcle.rmt.rqml.Lexicon;
00072 import com.arcle.rmt.rqml.Project;
00073 import com.arcle.rmt.rqml.Usecase;
00074
00075 import com.arcle.rmt.j2se.swing.vc.ElementEditFactory;
00076 import com.arcle.rmt.j2se.swing.vc.ElementEdit;
00077 import com.arcle.rmt.j2se.util.GenericClassMap;
00078 import com.arcle.rmt.j2se.util.ClassMapVisitor;
00079
00086 public final class ElementEditFactoryFacade implements ElementEditFactory {
00087 private ElementEditFactoryFacade () { }
00088
00089
00090
00091
00095 public static synchronized ElementEditFactory getInstance() {
00096 if (_instance == null) {
00097 _instance = new ElementEditFactoryFacade();
00098 }
00099 return _instance;
00100 }
00101
00102 protected synchronized ElementEditFactories getFactories() {
00103 ElementEditFactories fac = (ElementEditFactories) _factories.get();
00104 if (fac == null) {
00105 fac = createElementEditFactories();
00106 _factories = new SoftReference(fac);
00107 }
00108 return fac;
00109 }
00110
00111
00112
00113
00114 public ElementEdit createElementEdit(final RQMLFirstClass elem) {
00115 ElementEditFactory factory =
00116 (ElementEditFactory) getFactories().findFirstInstance(elem);
00117 if (factory == null) {
00118 throw new UnsupportedOperationException(
00119 "Unknown editor class for element: " + elem);
00120 }
00121 return factory.createElementEdit(elem);
00122 }
00123
00124
00125 protected ElementEditFactories createElementEditFactories() {
00126 return new ElementEditFactories();
00127 }
00128
00129
00130
00131
00132
00133 private static ElementEditFactoryFacade _instance = null;
00134
00138 private SoftReference _factories = new SoftReference(null);
00139
00140
00141
00142
00143
00144 protected class ElementEditFactories extends GenericClassMap {
00145 protected Map createMappings() {
00146 Map nodes = new Hashtable(11, 1);
00147
00148 nodes.put(Stakeholder.class, new ElementEditFactory() {
00149 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00150 return new StakeholderEdit(elem);
00151 }
00152 });
00153
00154 nodes.put(Requirement.class, new ElementEditFactory() {
00155 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00156 return new RequirementEdit(elem);
00157 }
00158 });
00159
00160 nodes.put(Issue.class, new ElementEditFactory() {
00161 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00162 return new IssueEdit(elem);
00163 }
00164 });
00165
00166 nodes.put(Assumption.class, new ElementEditFactory() {
00167 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00168 return new AssumptionEdit(elem);
00169 }
00170 });
00171
00172 nodes.put(Taxonomy.class, new ElementEditFactory() {
00173 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00174 return new TaxonomyEdit(elem);
00175 }
00176 });
00177
00178 nodes.put(Context.class, new ElementEditFactory() {
00179 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00180 return new ContextEdit(elem);
00181 }
00182 });
00183
00184 nodes.put(Lexicon.class, new ElementEditFactory() {
00185 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00186 return new LexiconEdit(elem);
00187 }
00188 });
00189
00190 nodes.put(Project.class, new ElementEditFactory() {
00191 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00192 return new ProjectEdit(elem);
00193 }
00194 });
00195
00196 nodes.put(Usecase.class, new ElementEditFactory() {
00197 public ElementEdit createElementEdit(RQMLFirstClass elem) {
00198 return new UsecaseEdit(elem);
00199 }
00200 });
00201
00202 return nodes;
00203 }
00204 }
00205 }
00206