1 56 package org.objectstyle.cayenne.pref; 57 58 import java.util.Collections ; 59 60 import org.objectstyle.cayenne.access.DataContext; 61 62 67 public abstract class CayennePreferenceEditor implements PreferenceEditor { 68 69 protected CayennePreferenceService service; 70 protected DataContext editingContext; 71 protected boolean restartRequired; 72 protected int saveInterval; 73 74 public CayennePreferenceEditor(CayennePreferenceService service) { 75 this.service = service; 76 this.editingContext = service 77 .getDataContext() 78 .getParentDataDomain() 79 .createDataContext(); 80 this.saveInterval = service.getSaveInterval(); 81 } 82 83 protected boolean isRestartRequired() { 84 return restartRequired; 85 } 86 87 protected void setRestartRequired(boolean restartOnSave) { 88 this.restartRequired = restartOnSave; 89 } 90 91 protected DataContext getEditingContext() { 92 return editingContext; 93 } 94 95 public Domain editableInstance(Domain object) { 96 if (object.getDataContext() == getEditingContext()) { 97 return object; 98 } 99 100 return (Domain) getEditingContext().localObjects( 101 Collections.singletonList(object)).get(0); 102 } 103 104 public PreferenceDetail createDetail(Domain domain, String key) { 105 domain = editableInstance(domain); 106 DomainPreference preference = (DomainPreference) getEditingContext() 107 .createAndRegisterNewObject(DomainPreference.class); 108 preference.setDomain(domain); 109 preference.setKey(key); 110 111 return preference.getPreference(); 112 } 113 114 public PreferenceDetail createDetail(Domain domain, String key, Class javaClass) { 115 domain = editableInstance(domain); 116 DomainPreference preferenceLink = (DomainPreference) getEditingContext() 117 .createAndRegisterNewObject(DomainPreference.class); 118 preferenceLink.setDomain(domain); 119 preferenceLink.setKey(key); 120 121 PreferenceDetail detail = (PreferenceDetail) getEditingContext() 122 .createAndRegisterNewObject(javaClass); 123 124 detail.setDomainPreference(preferenceLink); 125 return detail; 126 } 127 128 public PreferenceDetail deleteDetail(Domain domain, String key) { 129 domain = editableInstance(domain); 130 PreferenceDetail detail = domain.getDetail(key, false); 131 132 if (detail != null) { 133 DomainPreference preference = detail.getDomainPreference(); 134 preference.setDomain(null); 135 getEditingContext().deleteObject(preference); 136 getEditingContext().deleteObject(detail); 137 } 138 139 return detail; 140 } 141 142 public int getSaveInterval() { 143 return saveInterval; 144 } 145 146 public void setSaveInterval(int ms) { 147 if (saveInterval != ms) { 148 saveInterval = ms; 149 restartRequired = true; 150 } 151 } 152 153 public PreferenceService getService() { 154 return service; 155 } 156 157 public void save() { 158 service.setSaveInterval(saveInterval); 159 editingContext.commitChanges(); 160 161 if (restartRequired) { 162 restart(); 163 } 164 } 165 166 public void revert() { 167 editingContext.rollbackChanges(); 168 restartRequired = false; 169 } 170 171 protected abstract void restart(); 172 } | Popular Tags |