00001
00058 package com.arcle.rmt.j2se.bridge.swexport;
00059 import java.util.List;
00060 import java.util.Iterator;
00061 import java.util.Arrays;
00062 import java.lang.ref.SoftReference;
00063
00064
00065 import com.arcle.rmt.j2se.bridge.swexport.rqml.*;
00066 import com.arcle.rmt.superwaba.model.Document;
00067 import com.arcle.rmt.rqml.RQMLFirstClass;
00068
00082 public final class SwExportFacade {
00086 private SwExportFacade() { }
00087
00095 public boolean export(RQMLFirstClass srcElem, Document dest) {
00096 Iterator iter = getExporters().iterator();
00097 boolean succeed = false;
00098
00099 while (iter.hasNext() && !succeed) {
00100 FirstClassExporter exporter = (FirstClassExporter) iter.next();
00101 succeed = exporter.export(srcElem, dest);
00102 }
00103 return succeed;
00104 }
00105
00106
00107
00112 protected synchronized List getExporters() {
00113 List exp = (List) _exporters.get();
00114 if (exp == null) {
00115 exp = createExporters();
00116 _exporters = new SoftReference(exp);
00117 }
00118 return exp;
00119 }
00120
00124 public synchronized static SwExportFacade getInstance() {
00125 if (_instance == null) {
00126 _instance = new SwExportFacade();
00127 }
00128 return _instance;
00129 }
00130
00131
00132
00137 protected List createExporters() {
00138 return Arrays.asList(new FirstClassExporter[] {
00139 new RequirementExport(),
00140 new UsecaseExport(),
00141 new StakeholderExport(),
00142 new AssumptionExport(),
00143 new IssueExport(),
00144 new LexiconExport(),
00145 new ContextExport(),
00146 new TaxonomyExport(),
00147 new ProjectExport()
00148 });
00149 }
00150
00151
00152
00156 private SoftReference _exporters = new SoftReference(null);
00157
00161 private static SwExportFacade _instance = null;
00162 }