001: package org.netbeans.modules.j2ee.persistence.spi.support;
002:
003: import java.beans.PropertyChangeEvent;
004: import java.beans.PropertyChangeListener;
005: import java.io.File;
006: import java.io.IOException;
007: import org.netbeans.api.java.classpath.ClassPath;
008: import org.netbeans.junit.NbTestCase;
009: import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel;
010: import org.netbeans.modules.j2ee.persistence.api.PersistenceScope;
011: import org.netbeans.modules.j2ee.persistence.api.PersistenceScopes;
012: import org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata;
013: import org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeFactory;
014: import org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeImplementation;
015: import org.openide.filesystems.FileObject;
016: import org.openide.filesystems.FileUtil;
017:
018: /**
019: *
020: * @author Andrei Badea
021: */
022: public class PersistenceScopesHelperTest extends NbTestCase {
023:
024: private FileObject dataDir;
025: private FileObject workDir;
026:
027: private PersistenceScope persistenceScope;
028:
029: public PersistenceScopesHelperTest(String testName) {
030: super (testName);
031: }
032:
033: public void setUp() throws Exception {
034: clearWorkDir();
035: dataDir = FileUtil.toFileObject(getDataDir());
036: workDir = FileUtil.toFileObject(getWorkDir());
037:
038: persistenceScope = PersistenceScopeFactory
039: .createPersistenceScope(new PersistenceScopeImpl());
040: }
041:
042: private static FileObject copyFile(FileObject source,
043: FileObject destFolder) throws IOException {
044: return FileUtil.copyFile(source, destFolder, source.getName());
045: }
046:
047: public void testBasic() throws Exception {
048: PersistenceScope persistenceScope2 = PersistenceScopeFactory
049: .createPersistenceScope(new PersistenceScopeImpl());
050:
051: FileObject parent = workDir.createFolder("parent");
052: File persistenceXmlFile = new File(FileUtil.toFile(parent),
053: "persistence.xml");
054:
055: PersistenceScopesHelper helper = new PersistenceScopesHelper();
056: PersistenceScopes persistenceScopes = helper
057: .getPersistenceScopes();
058: PCL listener = new PCL();
059: persistenceScopes.addPropertyChangeListener(listener);
060:
061: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
062: assertEquals(0, listener.changeCount);
063:
064: helper.changePersistenceScope(persistenceScope,
065: persistenceXmlFile);
066:
067: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
068: assertEquals(0, listener.changeCount);
069:
070: // changing the persistence scope to null while persistence.xml is not null is not supported...
071:
072: try {
073: helper.changePersistenceScope(null, persistenceXmlFile);
074: fail();
075: } catch (IllegalArgumentException e) {
076: }
077:
078: // ... but changing the it to null while persistence.xml is null is
079:
080: helper.changePersistenceScope(null, null);
081:
082: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
083: assertEquals(0, listener.changeCount);
084:
085: // changing the persistence scope -- should not trigger any events, persistence.xml does not exist
086:
087: helper.changePersistenceScope(persistenceScope2,
088: persistenceXmlFile);
089:
090: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
091: assertEquals(0, listener.changeCount);
092:
093: // setting a null persistence.xml -- should not trigger any events, persistence.xml did not exist before
094:
095: helper.changePersistenceScope(persistenceScope2, null);
096:
097: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
098: assertEquals(0, listener.changeCount);
099:
100: // setting back a non-null, but not existing persistence.xml -- should not trigger any events
101:
102: helper.changePersistenceScope(persistenceScope2,
103: persistenceXmlFile);
104:
105: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
106: assertEquals(0, listener.changeCount);
107:
108: // creating the persistence.xml file -- should trigger an event
109:
110: copyFile(dataDir.getFileObject("persistence.xml"), parent);
111:
112: assertEquals(1, listener.changeCount);
113: assertSame(persistenceScope2, persistenceScopes
114: .getPersistenceScopes()[0]);
115:
116: // changing the persistence scope -- should trigger an event
117:
118: helper.changePersistenceScope(persistenceScope,
119: persistenceXmlFile);
120:
121: assertEquals(2, listener.changeCount);
122: assertSame(persistenceScope, persistenceScopes
123: .getPersistenceScopes()[0]);
124:
125: // changing to the same persistence scope -- should not trigger an event, since nothing has changed from the client's point of view
126:
127: helper.changePersistenceScope(persistenceScope,
128: persistenceXmlFile);
129:
130: assertEquals(2, listener.changeCount);
131: assertSame(persistenceScope, persistenceScopes
132: .getPersistenceScopes()[0]);
133:
134: // setting a null persistence.xml -- should trigger an event, persistence.xml existed before
135:
136: helper.changePersistenceScope(persistenceScope, null);
137:
138: assertEquals(3, listener.changeCount);
139: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
140:
141: // setting back a non-null and existing persistence.xml -- should trigger an event
142:
143: helper.changePersistenceScope(persistenceScope,
144: persistenceXmlFile);
145:
146: assertEquals(4, listener.changeCount);
147: assertSame(persistenceScope, persistenceScopes
148: .getPersistenceScopes()[0]);
149:
150: // removing the persistence.xml file -- should trigger an event
151:
152: parent.getFileObject("persistence.xml").delete();
153:
154: assertEquals(5, listener.changeCount);
155: assertEquals(0, persistenceScopes.getPersistenceScopes().length);
156:
157: // just making sure the helper is still returning the same instance of PersistenceScopes
158:
159: assertSame(persistenceScopes, helper.getPersistenceScopes());
160: }
161:
162: public void testPropertyChangeWhenFirstTimeSettingExistingPersistenceXml()
163: throws Exception {
164: FileObject persistenceXml = copyFile(dataDir
165: .getFileObject("persistence.xml"), workDir);
166:
167: PersistenceScopesHelper helper = new PersistenceScopesHelper();
168: PersistenceScopes persistenceScopes = helper
169: .getPersistenceScopes();
170: PCL listener = new PCL();
171: persistenceScopes.addPropertyChangeListener(listener);
172:
173: helper.changePersistenceScope(persistenceScope, FileUtil
174: .toFile(persistenceXml));
175:
176: assertEquals(1, listener.changeCount);
177: assertSame(persistenceScope, helper.getPersistenceScopes()
178: .getPersistenceScopes()[0]);
179: }
180:
181: private static final class PersistenceScopeImpl implements
182: PersistenceScopeImplementation {
183:
184: public FileObject getPersistenceXml() {
185: return null;
186: }
187:
188: public ClassPath getClassPath() {
189: return null;
190: }
191:
192: public MetadataModel<EntityMappingsMetadata> getEntityMappingsModel(
193: String persistenceUnitName) {
194: return null;
195: }
196: }
197:
198: private static final class PCL implements PropertyChangeListener {
199:
200: private int changeCount;
201:
202: public void propertyChange(PropertyChangeEvent event) {
203: assertEquals(PersistenceScopes.PROP_PERSISTENCE_SCOPES,
204: event.getPropertyName());
205: changeCount++;
206: }
207: }
208: }
|