1 6 package com.nightlabs.ipanema.person.edit.blockbased; 7 8 import java.util.Collections ; 9 import java.util.Iterator ; 10 import java.util.LinkedList ; 11 import java.util.List ; 12 import java.util.Map ; 13 14 import com.nightlabs.ipanema.person.Person; 15 import com.nightlabs.ipanema.person.PersonDataBlockGroup; 16 import com.nightlabs.ipanema.person.PersonStruct; 17 import com.nightlabs.ipanema.person.PersonStructCache; 18 import com.nightlabs.ipanema.person.edit.PersonEditor; 19 import com.nightlabs.ipanema.person.id.PersonStructBlockID; 20 import com.nightlabs.ipanema.person.preferences.PersonStructOrderConfigModule; 21 22 29 public abstract class AbstractBlockBasedPersonEditor implements PersonEditor { 31 public AbstractBlockBasedPersonEditor() { 32 this (null); 33 } 34 35 public AbstractBlockBasedPersonEditor(Person person) { 36 this.person = person; 37 } 38 39 40 protected Person person; 41 48 public void setPerson(Person person, boolean refresh) { 49 this.person = person; 50 if (refresh) 51 refreshControl(); 52 } 53 54 58 public void setPerson(Person person) { 59 setPerson(person,false); 60 } 61 65 public Person getPerson() { 66 return person; 67 } 68 69 73 protected PersonStruct getPersonStructure() { 74 return PersonStructCache.getPersonStructure(); 75 } 76 77 78 83 public abstract void refreshControl(); 84 85 private String editorScope; 86 private String editorName; 87 88 98 public void setEditorDomain(String editorScope, String editorName) { 99 this.editorScope = editorScope; 100 this.editorName = editorName; 101 } 102 103 110 public void setEditorDomain(String editorScope, String editorName, PersonStructBlockID[] personStructBlockKeys) { 111 setEditorDomain(editorScope,editorName); 112 PersonEditorStructBlockRegistry.getSharedInstance().addEditorStructBlocks(editorScope,editorName,personStructBlockKeys); 113 } 114 115 private List domainPersonStructBlocks; 116 117 protected boolean shouldDisplayStructBlock(PersonDataBlockGroup blockGroup) { 118 if (domainPersonStructBlocks == null) 120 return true; 121 else 122 return domainPersonStructBlocks.contains(PersonStructBlockID.create(blockGroup.getPersonStructBlockOrganisationID(),blockGroup.getPersonStructBlockID())); 123 } 124 125 protected void buildDomainDataBlockGroups() { 126 if (domainPersonStructBlocks == null) { 127 if ((editorScope != null ) && (editorName != null)) { 128 List structBlockList = PersonEditorStructBlockRegistry.getSharedInstance().getEditorStructBlocks(editorScope,editorName); 129 if (!structBlockList.isEmpty()) 130 domainPersonStructBlocks = structBlockList; 131 } 132 } 133 } 134 135 143 public void setEditorPersonStructBlockList(List structBlockList) { 144 if (structBlockList != null) { 145 if (structBlockList.size() > 0) 146 domainPersonStructBlocks = structBlockList; 147 else 148 domainPersonStructBlocks = null; 149 } else { 150 domainPersonStructBlocks = null; 151 } 152 } 153 154 155 protected Iterator getDataBlockGroupsIterator() { 156 buildDomainDataBlockGroups(); 157 return person.getPersonDataBlockGroups().iterator(); 158 } 159 160 public Map getStructBlockDisplayOrder() { 161 return PersonStructOrderConfigModule.getSharedInstance().structBlockDisplayOrder(); 162 } 163 164 protected Iterator getOrderedDataBlockGroupsIterator() { 165 buildDomainDataBlockGroups(); 166 167 int allStructBlockCount = getPersonStructure().getPersonStructBlocks().size(); 168 List result = new LinkedList (); 169 Map structBlockOrder = getStructBlockDisplayOrder(); 170 171 int maxIndex = 0; 172 int unmentionedCount = 0; 173 for (Iterator it = person.getPersonDataBlockGroups().iterator(); it.hasNext(); ) { 175 PersonDataBlockGroup blockGroup = (PersonDataBlockGroup)it.next(); 176 boolean orderedAdd = false; 177 if (structBlockOrder.containsKey(blockGroup.getStructBlockKey())) { 178 Integer index = (Integer )structBlockOrder.get(blockGroup.getStructBlockKey()); 180 blockGroup.setPriority(index.intValue()); 181 } 182 else { 183 blockGroup.setPriority(allStructBlockCount + (unmentionedCount++)); 184 } 185 result.add(blockGroup); 186 } 187 Collections.sort(result); 188 return result.iterator(); 189 } 190 } 191 | Popular Tags |