Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

ElementEditFactoryFacade.java

Go to the documentation of this file.
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     // Accessor Methods
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     // Factory Methods
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     // Member Variables
00132 
00133     private static ElementEditFactoryFacade _instance = null;
00134 
00138     private SoftReference _factories = new SoftReference(null);
00139 
00140     //-----------------------------------------------------------------------
00141     // Inner classes
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 

Generated on Fri Jun 18 19:51:20 2004 for Arcle Rambutan by doxygen 1.3.5