00001
00066 package com.arcle.rmt.superwaba.model.imp;
00067
00068
00069 import superwaba.ext.xplat.io.DataStream;
00070 import superwaba.ext.xplat.io.Storable;
00071
00072 import com.arcle.rmt.xplat.util.List;
00073 import com.arcle.rmt.superwaba.util.VectorListAdapter;
00074 import com.arcle.rmt.superwaba.model.Document;
00075 import com.arcle.rmt.superwaba.framework.Model;
00076 import com.arcle.rmt.rqml.*;
00077 import com.arcle.rmt.superwaba.model.imp.rqml.*;
00078
00086 public class DocumentImpl implements Document, Mementoable, Model {
00087
00088
00089
00090 public DocumentImpl() {
00091 requirements = createList();
00092 assumptions = createList();
00093 stakeholders = createList();
00094 issues = createList();
00095 taxonomies = createList();
00096 lexicons = createList();
00097 contexts = createList();
00098 projects = createList();
00099 usecases = createList();
00100 }
00101
00102
00103
00104
00105 public Project createProject() {
00106 Project elem = createProjectImpl();
00107 projects.add(elem);
00108 elem.setID("prj-" + projects.size());
00109 return elem;
00110 }
00111
00112
00113 public int getProjectCount() {
00114 return projects.size();
00115 }
00116
00117
00118 public Project getProjectAt(int index) {
00119 return (Project) projects.get(index);
00120 }
00121
00122
00123 public boolean deleteProject(int index) {
00124 projects.remove(index);
00125 return true;
00126 }
00127
00128 public boolean deleteProject(Project elem) {
00129 return projects.remove(elem);
00130 }
00131
00132
00133
00134
00135 public Requirement createRequirement() {
00136 Requirement elem = createRequirementImpl();
00137 requirements.add(elem);
00138 elem.setID("req-" + requirements.size());
00139 return elem;
00140 }
00141
00142 public int getRequirementCount() {
00143 return requirements.size();
00144 }
00145
00146
00147 public Requirement getRequirementAt(int index) {
00148 return (Requirement) requirements.get(index);
00149 }
00150
00151
00152 public boolean deleteRequirement(int index) {
00153 requirements.remove(index);
00154 return true;
00155 }
00156
00157 public boolean deleteRequirement(Requirement req) {
00158 return requirements.remove(req);
00159 }
00160
00161
00162
00163
00164 public Stakeholder createStakeholder() {
00165 Stakeholder elem = createStakeholderImpl();
00166 stakeholders.add(elem);
00167 elem.setID("st-" + stakeholders.size());
00168 return elem;
00169 }
00170
00171
00172 public int getStakeholderCount() {
00173 return stakeholders.size();
00174 }
00175
00176
00177 public Stakeholder getStakeholderAt(int index) {
00178 return (Stakeholder) stakeholders.get(index);
00179 }
00180
00181
00182 public boolean deleteStakeholder(int index) {
00183 stakeholders.remove(index);
00184 return true;
00185 }
00186
00187 public boolean deleteStakeholder(Stakeholder elem) {
00188 return stakeholders.remove(elem);
00189 }
00190
00191
00192
00193
00194
00195 public Usecase createUsecase() {
00196 Usecase elem = createUsecaseImpl();
00197 usecases.add(elem);
00198 elem.setID("uc-" + usecases.size());
00199 return elem;
00200 }
00201
00202 public int getUsecaseCount() {
00203 return usecases.size();
00204 }
00205
00206
00207 public Usecase getUsecaseAt(int index) {
00208 return (Usecase) usecases.get(index);
00209 }
00210
00211
00212 public boolean deleteUsecase(int index) {
00213 usecases.remove(index);
00214 return true;
00215 }
00216
00217 public boolean deleteUsecase(Usecase uc) {
00218 return usecases.remove(uc);
00219 }
00220
00221
00222
00223
00224
00225 public Assumption createAssumption() {
00226 Assumption elem= createAssumptionImpl();
00227 assumptions.add(elem);
00228 elem.setID("as-" + assumptions.size());
00229 return elem;
00230 }
00231
00232
00233 public int getAssumptionCount() {
00234 return assumptions.size();
00235 }
00236
00237 public Assumption getAssumptionAt(int index) {
00238 return (Assumption) assumptions.get(index);
00239 }
00240
00241 public boolean deleteAssumption(int index) {
00242 assumptions.remove(index);
00243 return true;
00244 }
00245
00246 public boolean deleteAssumption(Assumption asm) {
00247 return assumptions.remove(asm);
00248 }
00249
00250
00251
00252
00253
00254 public Issue createIssue() {
00255 Issue elem = createIssueImpl();
00256 issues.add(elem);
00257 elem.setID("iss-" + issues.size());
00258 return elem;
00259 }
00260
00261 public int getIssueCount() {
00262 return issues.size();
00263 }
00264
00265
00266 public Issue getIssueAt(int index) {
00267 return (Issue) issues.get(index);
00268 }
00269
00270
00271 public boolean deleteIssue(int index) {
00272 issues.remove(index);
00273 return true;
00274 }
00275
00276 public boolean deleteIssue(Issue elem) {
00277 return issues.remove(elem);
00278 }
00279
00280
00281
00282
00283
00284 public Taxonomy createTaxonomy() {
00285 Taxonomy elem = createTaxonomyImpl();
00286 taxonomies.add(elem);
00287 elem.setID("tax-" + taxonomies.size());
00288 return elem;
00289 }
00290
00291
00292 public int getTaxonomyCount() {
00293 return taxonomies.size();
00294 }
00295
00296
00297 public Taxonomy getTaxonomyAt(int index) {
00298 return (Taxonomy) taxonomies.get(index);
00299 }
00300
00301
00302 public boolean deleteTaxonomy(int index) {
00303 taxonomies.remove(index);
00304 return true;
00305 }
00306
00307 public boolean deleteTaxonomy(Taxonomy elem) {
00308 return taxonomies.remove(elem);
00309 }
00310
00311
00312
00313
00314 public Context createContext() {
00315 Context elem = createContextImpl();
00316 contexts.add(elem);
00317 elem.setID("ctx-" + contexts.size());
00318 return elem;
00319 }
00320
00321
00322 public int getContextCount() {
00323 return contexts.size();
00324 }
00325
00326
00327 public Context getContextAt(int index) {
00328 return (Context) contexts.get(index);
00329 }
00330
00331
00332 public boolean deleteContext(int index) {
00333 contexts.remove(index);
00334 return true;
00335 }
00336
00337 public boolean deleteContext(Context elem) {
00338 return contexts.remove(elem);
00339 }
00340
00341
00342
00343
00344
00345 public Lexicon createLexicon() {
00346 Lexicon elem = createLexiconImpl();
00347 lexicons.add(elem);
00348 elem.setID("lex-" + lexicons.size());
00349 return elem;
00350 }
00351
00352
00353 public int getLexiconCount() {
00354 return lexicons.size();
00355 }
00356
00357
00358 public Lexicon getLexiconAt(int index) {
00359 return (Lexicon) lexicons.get(index);
00360 }
00361
00362
00363 public boolean deleteLexicon(int index) {
00364 lexicons.remove(index);
00365 return true;
00366 }
00367
00368 public boolean deleteLexicon(Lexicon elem) {
00369 return lexicons.remove(elem);
00370 }
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00396 public GenericMemento createMemento() {
00397 return new Memento(this);
00398 }
00399
00400
00404 public void setMemento(GenericMemento m) {
00405 DocumentImpl originator = (DocumentImpl) m.getOriginator();
00406 if (originator != this) {
00407
00408 shallowClone(originator);
00409 }
00410 }
00411
00412
00413
00414
00415
00419 public void setTitle(String title) {
00420 _title = title;
00421 }
00422
00426 public String getTitle() {
00427 return _title;
00428 }
00429
00430 public void setDeleted() {
00431 _isDeleted = true;
00432 }
00433
00434 public boolean isDeleted() {
00435 return _isDeleted;
00436 }
00437
00438
00439
00440
00441
00442
00447 protected void shallowClone(DocumentImpl other) {
00448 requirements = other.requirements;
00449 _title = other._title;
00450 }
00451
00452
00453
00454
00455
00459 protected RequirementImpl createRequirementImpl() {
00460 return new RequirementImpl();
00461 }
00462
00463 protected AssumptionImpl createAssumptionImpl() {
00464 return new AssumptionImpl();
00465 }
00466
00467
00468 protected StakeholderImpl createStakeholderImpl() {
00469 return new StakeholderImpl();
00470 }
00471
00472 protected IssueImpl createIssueImpl() {
00473 return new IssueImpl();
00474 }
00475
00476 protected TaxonomyImpl createTaxonomyImpl() {
00477 return new TaxonomyImpl();
00478 }
00479
00480 protected LexiconImpl createLexiconImpl() {
00481 return new LexiconImpl();
00482 }
00483
00484 protected ContextImpl createContextImpl() {
00485 return new ContextImpl();
00486 }
00487
00488 protected ProjectImpl createProjectImpl() {
00489 return new ProjectImpl();
00490 }
00491
00492 protected UsecaseImpl createUsecaseImpl() {
00493 return new UsecaseImpl();
00494 }
00495
00496
00497 protected List createList() {
00498 return new VectorListAdapter();
00499 }
00500
00501
00502
00503
00504
00509 public static final byte DOCUMENT_ID = 0x01;
00510
00515 public static final byte PROJECT_ID = 0x02;
00516
00521 public static final byte REQUIREMENT_ID = 0x03;
00522
00527 public static final byte STAKEHOLDER_ID = 0x04;
00528
00533 public static final byte USECASE_ID = 0x05;
00534
00539 public static final byte ASSUMPTION_ID = 0x06;
00540
00545 public static final byte ISSUE_ID = 0x07;
00546
00551 public static final byte TAXONOMY_ID = 0x08;
00552
00557 public static final byte CONTEXT_ID = 0x09;
00558
00563 public static final byte LEXICON_ID = 0x0A;
00564
00569 public static final byte GROUP_ID = 0x0B;
00570
00575 public static final byte TRACE_ID = 0x0C;
00576
00577
00578
00579
00580
00585 public static final byte NAME_ID = 0x10;
00586
00591 public static final byte DESCRIPTION_ID = 0x11;
00592
00597 public static final byte RATIONALE_ID = 0x12;
00598
00599 public static final byte DEFINITION_ID = 0x13;
00600
00601 public static final byte TEXTUAL_DATA_ID = 0x14;
00602
00603 public static final byte ORIGIN_ID = 0x15;
00604
00605 public static final byte PRODUCT_ID = 0x16;
00606
00607 public static final byte PROBLEM_ID = 0x17;
00608
00609 public static final byte SCOPE_ID = 0x18;
00610
00611 public static final byte VISION_ID = 0x19;
00612
00613 public static final byte ACTOR_ID = 0x1A;
00614
00615 public static final byte PRECONDITION_ID = 0x1B;
00616
00617 public static final byte POSTCONDITION_ID = 0x1C;
00618
00619 public static final byte NORMAL_COURSE_ID = 0x1D;
00620
00621 public static final byte ALTERNATIVE_COURSE_ID = 0X1E;
00622
00623 public static final byte EXCEPTION_ID = 0X1F;
00624
00625 public static final byte ACTORACTION_ID = 0x20;
00626
00627 public static final byte SYSTEMRESPONSE_ID = 0X21;
00628
00629 public static final byte COMMENT_ID = 0x22;
00630
00631
00632
00633
00634 private List requirements;
00635
00636 private List assumptions;
00637
00638 private List stakeholders;
00639
00640 private List issues;
00641
00642 private List taxonomies;
00643
00644 private List lexicons;
00645
00646 private List contexts;
00647
00648 private List projects;
00649
00650 private List usecases;
00651
00655 private String _title;
00656
00657 private boolean _isDeleted = false;
00658
00659
00660
00661
00670 protected static class Memento extends GenericMemento {
00675 public Memento(DocumentImpl originator) {
00676 super(originator);
00677 }
00678
00679
00680
00681
00682 public byte getID() {
00683 return DOCUMENT_ID;
00684 }
00685
00686 public Storable getInstance() {
00687
00688
00689 DocumentImpl originator = createDocumentImpl();
00690 return new Memento(originator);
00691 }
00692
00696 public void saveState(DataStream data) {
00697 final DocumentImpl org = (DocumentImpl) getOriginator();
00698 data.writeString(org._title);
00699
00700 saveRequirements(data);
00701 saveAssumptions(data);
00702 saveStakeholders(data);
00703 saveIssues(data);
00704 saveTaxonomies(data);
00705 saveContexts(data);
00706 saveProjects(data);
00707 saveUsecases(data);
00708 saveLexicons(data);
00709 }
00710
00715 public void loadState(DataStream data) {
00716 final DocumentImpl org = (DocumentImpl) getOriginator();
00717 org._title = data.readString();
00718
00719 loadRequirements(data);
00720 loadAssumptions(data);
00721 loadStakeholders(data);
00722 loadIssues(data);
00723 loadTaxonomies(data);
00724 loadContexts(data);
00725 loadProjects(data);
00726 loadUsecases(data);
00727 loadLexicons(data);
00728 }
00729
00730
00731
00732
00733
00734
00739 protected void saveRequirements(DataStream stream) {
00740 final DocumentImpl org = (DocumentImpl) getOriginator();
00741 saveList(org.requirements, stream);
00742 }
00743
00748 protected void loadRequirements(DataStream stream) {
00749 final DocumentImpl org = (DocumentImpl) getOriginator();
00750 org.requirements = loadList(stream, new MementoableFactory() {
00751 public Mementoable createOriginator() {
00752 return (Mementoable) org.createRequirementImpl();
00753 }
00754 });
00755 }
00756
00757
00758
00763 protected void saveAssumptions(DataStream stream) {
00764 final DocumentImpl org = (DocumentImpl) getOriginator();
00765 saveList(org.assumptions, stream);
00766 }
00767
00772 protected void loadAssumptions(DataStream stream) {
00773 final DocumentImpl org = (DocumentImpl) getOriginator();
00774 org.assumptions = loadList(stream, new MementoableFactory() {
00775 public Mementoable createOriginator() {
00776 return (Mementoable) org.createAssumptionImpl();
00777 }
00778 });
00779 }
00780
00781
00782
00787 protected void saveStakeholders(DataStream stream) {
00788 final DocumentImpl org = (DocumentImpl) getOriginator();
00789 saveList(org.stakeholders, stream);
00790 }
00791
00796 protected void loadStakeholders(DataStream stream) {
00797 final DocumentImpl org = (DocumentImpl) getOriginator();
00798 org.stakeholders = loadList(stream, new MementoableFactory() {
00799 public Mementoable createOriginator() {
00800 return (Mementoable) org.createStakeholderImpl();
00801 }
00802 });
00803 }
00804
00805
00806
00811 protected void saveIssues(DataStream stream) {
00812 final DocumentImpl org = (DocumentImpl) getOriginator();
00813 saveList(org.issues, stream);
00814 }
00815
00820 protected void loadIssues(DataStream stream) {
00821 final DocumentImpl org = (DocumentImpl) getOriginator();
00822 org.issues = loadList(stream, new MementoableFactory() {
00823 public Mementoable createOriginator() {
00824 return (Mementoable) org.createIssueImpl();
00825 }
00826 });
00827 }
00828
00829
00830
00835 protected void saveTaxonomies(DataStream stream) {
00836 final DocumentImpl org = (DocumentImpl) getOriginator();
00837 saveList(org.taxonomies, stream);
00838 }
00839
00844 protected void loadTaxonomies(DataStream stream) {
00845 final DocumentImpl org = (DocumentImpl) getOriginator();
00846 org.taxonomies = loadList(stream, new MementoableFactory() {
00847 public Mementoable createOriginator() {
00848 return (Mementoable) org.createTaxonomyImpl();
00849 }
00850 });
00851 }
00852
00853
00854
00859 protected void saveLexicons(DataStream stream) {
00860 final DocumentImpl org = (DocumentImpl) getOriginator();
00861 saveList(org.lexicons, stream);
00862 }
00863
00868 protected void loadLexicons(DataStream stream) {
00869 final DocumentImpl org = (DocumentImpl) getOriginator();
00870 org.lexicons= loadList(stream, new MementoableFactory() {
00871 public Mementoable createOriginator() {
00872 return (Mementoable) org.createLexiconImpl();
00873 }
00874 });
00875 }
00876
00877
00882 protected void saveContexts(DataStream stream) {
00883 final DocumentImpl org = (DocumentImpl) getOriginator();
00884 saveList(org.contexts, stream);
00885 }
00886
00891 protected void loadContexts(DataStream stream) {
00892 final DocumentImpl org = (DocumentImpl) getOriginator();
00893 org.contexts = loadList(stream, new MementoableFactory() {
00894 public Mementoable createOriginator() {
00895 return (Mementoable) org.createContextImpl();
00896 }
00897 });
00898 }
00899
00900
00905 protected void saveProjects(DataStream stream) {
00906 final DocumentImpl org = (DocumentImpl) getOriginator();
00907 saveList(org.projects, stream);
00908 }
00909
00914 protected void loadProjects(DataStream stream) {
00915 final DocumentImpl org = (DocumentImpl) getOriginator();
00916 org.projects = loadList(stream, new MementoableFactory() {
00917 public Mementoable createOriginator() {
00918 return (Mementoable) org.createProjectImpl();
00919 }
00920 });
00921 }
00922
00923
00928 protected void saveUsecases(DataStream stream) {
00929 final DocumentImpl org = (DocumentImpl) getOriginator();
00930 saveList(org.usecases, stream);
00931 }
00932
00937 protected void loadUsecases(DataStream stream) {
00938 final DocumentImpl org = (DocumentImpl) getOriginator();
00939 org.usecases = loadList(stream, new MementoableFactory() {
00940 public Mementoable createOriginator() {
00941 return (Mementoable) org.createUsecaseImpl();
00942 }
00943 });
00944 }
00945
00946
00947
00948
00954 protected DocumentImpl createDocumentImpl() {
00955 return new DocumentImpl();
00956 }
00957 }
00958 }