package er.indexing.example; import com.webobjects.appserver.WOActionResults; import com.webobjects.appserver.WORequest; import com.webobjects.eocontrol.EOEditingContext; import com.webobjects.eocontrol.EOKeyValueQualifier; import com.webobjects.eocontrol.EOQualifier; import com.webobjects.eocontrol._EOMutableKnownKeyDictionary; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSNotification; import er.directtoweb.ERD2WDirectAction; import er.extensions.eof.ERXEC; import er.extensions.foundation.ERXRemoteNotificationCenter; import er.extensions.foundation.ERXSelectorUtilities; import er.indexing.ERIndex; import er.indexing.example.eof.Asset; import er.indexing.example.eof.AssetGroup; import er.indexing.example.eof.Tag; public class DirectAction extends ERD2WDirectAction { public DirectAction(WORequest aRequest) { super(aRequest); } /** * Checks if a page configuration is allowed to render. * Provide a more intelligent access scheme as the default just returns false. And * be sure to read the javadoc to the super class. * @param pageConfiguration * @return */ @Override protected boolean allowPageConfiguration(String pageConfiguration) { return true; } @Override public WOActionResults defaultAction() { //testIndexing(); NSDictionary dict = new NSDictionary("TestValue", "TestKey"); NSArray keys = new NSArray(new String[]{"test1", "test2"}); _EOMutableKnownKeyDictionary vals; _EOMutableKnownKeyDictionary.Initializer initializer = new _EOMutableKnownKeyDictionary.Initializer(keys); vals = new _EOMutableKnownKeyDictionary(initializer); log.info(vals); vals.setObjectForKey("t1", "test1"); log.info(vals); vals.setObjectForKey("t2", "test2"); log.info(vals); vals.setObjectForKey("t3", "test3"); log.info(vals); vals = new _EOMutableKnownKeyDictionary(initializer, new Object[]{"1", "2"}); log.info(vals); // ERXRemoteNotificationCenter.defaultCenter().postNotification("All", null, dict); return pageWithName(Main.class); } static { ERXRemoteNotificationCenter.defaultCenter().addObserver(DirectAction.class, ERXSelectorUtilities.notificationSelector("receiveNotification"), "All", null); } public static void receiveNotification(NSNotification n) { log.info("Received: " + n); } private void testIndexing() { EOEditingContext ec = ERXEC.newEditingContext(); ec.lock(); try { Tag tag = Tag.clazz.allObjects(ec).lastObject(); Asset asset = Asset.clazz.allObjects(ec).lastObject(); AssetGroup assetGroup = AssetGroup.clazz.allObjects(ec).lastObject(); // new DataCreator().createDummyData(); ERIndex eofStore = ERIndex.indexNamed("AssetInEOFStore"); ERIndex fileStore = ERIndex.indexNamed("AssetInFileStore"); EOQualifier tagQualifier = new EOKeyValueQualifier("tags.name", EOQualifier.QualifierOperatorEqual, tag.name()); EOQualifier groupQualifier = new EOKeyValueQualifier("assetGroup.name", EOQualifier.QualifierOperatorEqual, tag.name()); log.info("fileStore: " + fileStore.findGlobalIDs(tagQualifier).count()); log.info("eofStore: " + eofStore.findGlobalIDs(tagQualifier).count()); log.info("fileStore: " + fileStore.findGlobalIDs(groupQualifier).count()); log.info("eofStore: " + eofStore.findGlobalIDs(groupQualifier).count()); String newName = "cooltest"; tagQualifier = new EOKeyValueQualifier("tags.name", com.webobjects.eocontrol.EOQualifier.QualifierOperatorEqual, newName); tag.setName(newName + " " + System.currentTimeMillis()); ec.saveChanges(); assetGroup.setName(newName + " " + System.currentTimeMillis()); ec.saveChanges(); log.info("fileStore 1: " + fileStore.findGlobalIDs(tagQualifier).count()); log.info("eofStore 1: " + eofStore.findGlobalIDs(tagQualifier).count()); try { if(true) { Thread.sleep(2000); } log.info("fileStore 2: " + fileStore.findGlobalIDs(tagQualifier).count()); log.info("eofStore 2: " + eofStore.findGlobalIDs(tagQualifier).count()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } finally { ec.unlock(); } } }