mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Renames of directories now behave as one would expect. (Fixes WCM-856)
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6920 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -56,12 +56,12 @@ public class AVMInterpreter
|
||||
* The service interface.
|
||||
*/
|
||||
private AVMService fService;
|
||||
|
||||
|
||||
/**
|
||||
* The sync service.
|
||||
*/
|
||||
private AVMSyncService fSyncService;
|
||||
|
||||
|
||||
/**
|
||||
* The reader for interaction.
|
||||
*/
|
||||
@@ -73,12 +73,12 @@ public class AVMInterpreter
|
||||
private BulkLoader fLoader;
|
||||
|
||||
/**
|
||||
* Main entry point.
|
||||
* Main entry point.
|
||||
* Syntax: AVMInteractiveConsole storage (new|old).
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
{
|
||||
FileSystemXmlApplicationContext context =
|
||||
FileSystemXmlApplicationContext context =
|
||||
new FileSystemXmlApplicationContext("config/alfresco/application-context.xml");
|
||||
AVMInterpreter console = new AVMInterpreter();
|
||||
console.setAvmService((AVMService)context.getBean("AVMService"));
|
||||
@@ -106,7 +106,7 @@ public class AVMInterpreter
|
||||
{
|
||||
fService = service;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the AVM sync service.
|
||||
* @param syncService
|
||||
@@ -115,7 +115,7 @@ public class AVMInterpreter
|
||||
{
|
||||
fSyncService = syncService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the bulk loader.
|
||||
* @param loader
|
||||
@@ -124,7 +124,7 @@ public class AVMInterpreter
|
||||
{
|
||||
fLoader = loader;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A Read-Eval-Print loop.
|
||||
*/
|
||||
@@ -181,7 +181,7 @@ public class AVMInterpreter
|
||||
return "Not Found.";
|
||||
}
|
||||
Map<String, AVMNodeDescriptor> listing =
|
||||
fService.getDirectoryListing(desc);
|
||||
fService.getDirectoryListing(desc, true);
|
||||
for (String name : listing.keySet())
|
||||
{
|
||||
out.println(name + " " + listing.get(name));
|
||||
@@ -320,9 +320,9 @@ public class AVMInterpreter
|
||||
{
|
||||
return "Syntax Error.";
|
||||
}
|
||||
BufferedReader reader =
|
||||
BufferedReader reader =
|
||||
new BufferedReader(
|
||||
new InputStreamReader(fService.getFileInputStream(Integer.parseInt(command[2]),
|
||||
new InputStreamReader(fService.getFileInputStream(Integer.parseInt(command[2]),
|
||||
command[1])));
|
||||
String l;
|
||||
while ((l = reader.readLine()) != null)
|
||||
@@ -361,7 +361,7 @@ public class AVMInterpreter
|
||||
{
|
||||
return "Syntax Error.";
|
||||
}
|
||||
PrintStream ps =
|
||||
PrintStream ps =
|
||||
new PrintStream(fService.getFileOutputStream(command[1]));
|
||||
String l;
|
||||
while (!(l = in.readLine()).equals(""))
|
||||
@@ -376,7 +376,7 @@ public class AVMInterpreter
|
||||
{
|
||||
return "Syntax Error.";
|
||||
}
|
||||
PrintStream ps =
|
||||
PrintStream ps =
|
||||
new PrintStream(fService.createFile(command[1], command[2]));
|
||||
String l;
|
||||
while (!(l = in.readLine()).equals(""))
|
||||
@@ -415,7 +415,7 @@ public class AVMInterpreter
|
||||
{
|
||||
return "Syntax Error.";
|
||||
}
|
||||
|
||||
|
||||
fService.deleteNodeProperty(command[1], QName.createQName(command[2]));
|
||||
out.println("deleted property " + command[2] + " of " + command[1]);
|
||||
}
|
||||
@@ -483,7 +483,7 @@ public class AVMInterpreter
|
||||
return "Not Found.";
|
||||
}
|
||||
out.println(desc);
|
||||
Map<QName, PropertyValue> props =
|
||||
Map<QName, PropertyValue> props =
|
||||
fService.getStoreProperties(command[1]);
|
||||
for (QName name : props.keySet())
|
||||
{
|
||||
@@ -512,7 +512,7 @@ public class AVMInterpreter
|
||||
{
|
||||
return "Syntax Error.";
|
||||
}
|
||||
AVMDifference diff = new AVMDifference(Integer.parseInt(command[2]), command[1],
|
||||
AVMDifference diff = new AVMDifference(Integer.parseInt(command[2]), command[1],
|
||||
-1, command[3], AVMDifference.NEWER);
|
||||
List<AVMDifference> diffs = new ArrayList<AVMDifference>();
|
||||
diffs.add(diff);
|
||||
@@ -552,7 +552,7 @@ public class AVMInterpreter
|
||||
|
||||
private void recursiveList(PrintStream out, AVMNodeDescriptor dir, int indent)
|
||||
{
|
||||
Map<String, AVMNodeDescriptor> listing = fService.getDirectoryListing(dir);
|
||||
Map<String, AVMNodeDescriptor> listing = fService.getDirectoryListing(dir, true);
|
||||
for (String name : listing.keySet())
|
||||
{
|
||||
AVMNodeDescriptor child = listing.get(name);
|
||||
@@ -568,7 +568,7 @@ public class AVMInterpreter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -96,11 +96,47 @@ import org.alfresco.util.Pair;
|
||||
|
||||
/**
|
||||
* Big test of AVM behavior.
|
||||
*
|
||||
*
|
||||
* @author britt
|
||||
*/
|
||||
public class AVMServiceTest extends AVMServiceTestBase
|
||||
{
|
||||
public void testRename6()
|
||||
{
|
||||
try
|
||||
{
|
||||
setupBasicTree();
|
||||
fService.createStore("layer");
|
||||
fService.createLayeredDirectory("main:/a", "layer:/", "a");
|
||||
fService.rename("layer:/a/b", "c", "layer:/a/b", "z");
|
||||
System.out.println(recursiveContents("layer:/", -1, true));
|
||||
List<AVMDifference> diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null);
|
||||
System.out.println(diffs);
|
||||
fSyncService.update(diffs, null, false, false, false, false, null, null);
|
||||
System.out.println(recursiveContents("layer:/", -1, true));
|
||||
System.out.println(recursiveContents("main:/", -1, true));
|
||||
fSyncService.flatten("layer:/a", "main:/a");
|
||||
System.out.println(recursiveContents("layer:/", -1, true));
|
||||
System.out.println(recursiveContents("main:/", -1, true));
|
||||
fService.createFile("layer:/a/b/z", "fudge").close();
|
||||
fService.rename("layer:/a/b", "z", "layer:/a/b", "y");
|
||||
System.out.println(recursiveContents("layer:/", -1, true));
|
||||
diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null);
|
||||
System.out.println(diffs);
|
||||
fSyncService.update(diffs, null, false, false, false, false, null, null);
|
||||
System.out.println(recursiveContents("layer:/", -1, true));
|
||||
System.out.println(recursiveContents("main:/", -1, true));
|
||||
fSyncService.flatten("layer:/a", "main:/a");
|
||||
System.out.println(recursiveContents("layer:/", -1, true));
|
||||
System.out.println(recursiveContents("main:/", -1, true));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
public void testSpacesInStoreNames()
|
||||
{
|
||||
try
|
||||
@@ -115,7 +151,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void testHeadPathsInLayers()
|
||||
{
|
||||
try
|
||||
@@ -143,7 +179,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Minimal testing of Locking Aware service.
|
||||
*/
|
||||
@@ -154,17 +190,17 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
AuthenticationService authService = (AuthenticationService)fContext.getBean("AuthenticationService");
|
||||
try
|
||||
{
|
||||
fService.setStoreProperty("main", QName.createQName(null, ".dns.main"),
|
||||
fService.setStoreProperty("main", QName.createQName(null, ".dns.main"),
|
||||
new PropertyValue(DataTypeDefinition.TEXT, "Nothing."));
|
||||
fService.createStore("test");
|
||||
fService.setStoreProperty("test", QName.createQName(null, ".dns.test.main"),
|
||||
fService.setStoreProperty("test", QName.createQName(null, ".dns.test.main"),
|
||||
new PropertyValue(DataTypeDefinition.TEXT, "Nothing."));
|
||||
setupBasicTree0();
|
||||
authService.authenticateAsGuest();
|
||||
// assertEquals(0, fLockingService.getUsersLocks("admin").size());
|
||||
List<AVMDifference> diffs = fSyncService.compare(-1, "main:/", -1, "test:/", null);
|
||||
fSyncService.update(diffs, null, false, false, false, false, null, null);
|
||||
RetryingTransactionHelper.RetryingTransactionCallback<Object> cb =
|
||||
RetryingTransactionHelper.RetryingTransactionCallback<Object> cb =
|
||||
new RetryingTransactionHelper.RetryingTransactionCallback<Object>()
|
||||
{
|
||||
public Object execute()
|
||||
@@ -172,7 +208,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
{
|
||||
BulkLoader loader = new BulkLoader();
|
||||
loader.setAvmService(fService);
|
||||
loader.recursiveLoad("source/java/org/alfresco/repo/avm", "main:/");
|
||||
loader.recursiveLoad("source/java/org/alfresco/repo/avm", "main:/");
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@@ -232,13 +268,13 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
try
|
||||
{
|
||||
setupBasicTree();
|
||||
|
||||
|
||||
StoreRef storeRef = AVMNodeConverter.ToStoreRef("main");
|
||||
SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true);
|
||||
ResultSet results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@{silly.uri}SillyProperty")+":\"Silly\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
QName name = QName.createQName("silly.uri", "SillyProperty");
|
||||
PropertyValue value = new PropertyValue(DataTypeDefinition.TEXT, "Silly Property Value");
|
||||
fService.setNodeProperty("main:/a/b/c/foo", name, value);
|
||||
@@ -251,8 +287,8 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
Map<QName, PropertyValue> props = fService.getNodeProperties(-1, "main:/a/b/c/foo");
|
||||
assertEquals(1, props.size());
|
||||
assertEquals(value.toString(), props.get(name).toString());
|
||||
|
||||
|
||||
|
||||
|
||||
props = new HashMap<QName, PropertyValue>();
|
||||
QName n1 = QName.createQName("silly.uri", "Prop1");
|
||||
PropertyValue p1 = new PropertyValue(DataTypeDefinition.DATETIME, new Date(System.currentTimeMillis()));
|
||||
@@ -270,38 +306,38 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
assertEquals(p1.toString(), props.get(n1).toString());
|
||||
assertEquals(p2.toString(), props.get(n2).toString());
|
||||
assertEquals(p3.toString(), props.get(n3).toString());
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@{silly.uri}Prop1")+":\"" + props.get(n1).getStringValue() +"\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@{silly.uri}Prop2")+":\"" + props.get(n2).getStringValue() +"\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
fService.deleteNodeProperty("main:/a/b/c/bar", n1);
|
||||
fService.createSnapshot("main", null, null);
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@{silly.uri}Prop1")+":\"" + props.get(n1).getStringValue() +"\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@{silly.uri}Prop2")+":\"" + props.get(n2).getStringValue() +"\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
props = fService.getNodeProperties(-1, "main:/a/b/c/bar");
|
||||
assertEquals(2, props.size());
|
||||
assertEquals(p2.toString(), props.get(n2).toString());
|
||||
assertEquals(p3.toString(), props.get(n3).toString());
|
||||
fService.deleteNodeProperties("main:/a/b/c/bar");
|
||||
fService.createSnapshot("main", null, null);
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@{silly.uri}Prop1")+":\"" + p1.getStringValue() +"\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@{silly.uri}Prop2")+":\"" + props.get(n2).getStringValue() +"\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
props = fService.getNodeProperties(-1, "main:/a/b/c/bar");
|
||||
assertEquals(0, props.size());
|
||||
fService.removeNode("main:/a/b/c/foo");
|
||||
@@ -361,9 +397,9 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void testForceCopyDeleted()
|
||||
{
|
||||
try
|
||||
@@ -1075,7 +1111,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
};
|
||||
TransactionService transactionService = (TransactionService) fContext.getBean("transactionService");
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork());
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "TEXT:\"HEAD\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
@@ -1769,7 +1805,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
};
|
||||
TransactionService transactionService = (TransactionService) fContext.getBean("transactionService");
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork());
|
||||
|
||||
|
||||
diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null);
|
||||
assertEquals(0, diffs.size());
|
||||
System.out.println(recursiveList("area", -1, true));
|
||||
@@ -1814,7 +1850,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
};
|
||||
TransactionService transactionService = (TransactionService) fContext.getBean("transactionService");
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork());
|
||||
|
||||
|
||||
diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null);
|
||||
assertEquals(0, diffs.size());
|
||||
System.out.println(recursiveList("area", -1, true));
|
||||
@@ -2877,9 +2913,11 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
assertEquals("baz", list.get(0));
|
||||
assertEquals("figs", list.get(1));
|
||||
// Rename /layer/d to /layer/e and uncover /layer/d
|
||||
System.out.println(recursiveContents("main:/", -1, true));
|
||||
fService.rename("main:/layer", "d", "main:/layer", "e");
|
||||
fService.uncover("main:/layer", "d");
|
||||
fService.createSnapshot("main", null, null);
|
||||
System.out.println(recursiveContents("main:/", -1, true));
|
||||
// History unchanged.
|
||||
checkHistory(history, "main");
|
||||
// /layer/d contains figs.
|
||||
@@ -2887,11 +2925,12 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
assertEquals(1, listing.size());
|
||||
list = new ArrayList<String>(listing.keySet());
|
||||
assertEquals("figs", list.get(0));
|
||||
// /layer/e contains baz.
|
||||
// /layer/e contains baz and figs.
|
||||
listing = fService.getDirectoryListing(-1, "main:/layer/e");
|
||||
assertEquals(1, listing.size());
|
||||
assertEquals(2, listing.size());
|
||||
list = new ArrayList<String>(listing.keySet());
|
||||
assertEquals("baz", list.get(0));
|
||||
assertEquals("figs", list.get(1));
|
||||
for (String val : history.values())
|
||||
{
|
||||
System.out.println(val);
|
||||
@@ -3592,8 +3631,8 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
@@ -3605,7 +3644,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/brenamed\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/brenamed/c\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
@@ -3618,7 +3657,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
@@ -3666,7 +3705,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
@@ -3702,7 +3741,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
System.out.println(history.get(2));
|
||||
l = fService.getDirectoryListing(-1, "main:/d");
|
||||
assertEquals(0, l.size());
|
||||
|
||||
|
||||
// Text index
|
||||
StoreRef storeRef = AVMNodeConverter.ToStoreRef("main");
|
||||
SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true);
|
||||
@@ -3841,7 +3880,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -4704,224 +4743,224 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected void runQueriesForInitialRenameStructure(String store)
|
||||
{
|
||||
StoreRef storeRef = AVMNodeConverter.ToStoreRef(store);
|
||||
|
||||
|
||||
|
||||
|
||||
SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true);
|
||||
|
||||
|
||||
// Note "a" is a stop word and therefore not findable ...
|
||||
|
||||
|
||||
ResultSet results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_CREATOR)+":admin");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_MODIFIER)+":admin");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_OWNER)+":admin");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_NODE_UUID)+":unknown");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_STORE_PROTOCOL)+":avm");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_STORE_IDENTIFIER)+":"+store);
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
// Basic paths
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//*\"");
|
||||
assertEquals(6, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\"");
|
||||
assertEquals(3, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
protected void runQueriesForInitialRenameStructureAndInitialLayers(String store)
|
||||
{
|
||||
StoreRef storeRef = AVMNodeConverter.ToStoreRef(store);
|
||||
|
||||
|
||||
|
||||
|
||||
SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true);
|
||||
|
||||
|
||||
// Note "a" is a stop word and therefore not findable ...
|
||||
|
||||
|
||||
ResultSet results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_CREATOR)+":admin");
|
||||
assertEquals(9, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_MODIFIER)+":admin");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_OWNER)+":admin");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_NODE_UUID)+":unknown");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_STORE_PROTOCOL)+":avm");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", LuceneQueryParser.escape("@"+ContentModel.PROP_STORE_IDENTIFIER)+":"+store);
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
// Basic paths
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(7, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//*\"");
|
||||
assertEquals(6, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\"");
|
||||
assertEquals(3, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\"");
|
||||
assertEquals(2, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test rename behavior of an overlayed file withing a layer.
|
||||
*/
|
||||
@@ -5178,7 +5217,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
try
|
||||
{
|
||||
setupBasicTree();
|
||||
|
||||
|
||||
StoreRef storeRef = AVMNodeConverter.ToStoreRef("main");
|
||||
SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true);
|
||||
ResultSet results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_TITLED.toString() +"\"");
|
||||
@@ -5187,7 +5226,7 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_AUDITABLE.toString() +"\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
fService.addAspect("main:/a/b/c/foo", ContentModel.ASPECT_TITLED);
|
||||
fService.addAspect("main:/a/b/c/foo", ContentModel.ASPECT_AUDITABLE);
|
||||
Map<QName, PropertyValue> properties = new HashMap<QName, PropertyValue>();
|
||||
@@ -5198,14 +5237,14 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
properties.put(ContentModel.PROP_MODIFIER, new PropertyValue(DataTypeDefinition.TEXT, "Quentin"));
|
||||
fService.setNodeProperties("main:/a/b/c/foo", properties);
|
||||
fService.createSnapshot("main", null, null);
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_TITLED.toString() +"\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_AUDITABLE.toString() +"\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
fService.removeNode("main:/a/b/c/bar");
|
||||
fService.addAspect("main:/a/b/c/bar", ContentModel.ASPECT_TITLED);
|
||||
Set<QName> names = fService.getAspects(-1, "main:/a/b/c/foo");
|
||||
@@ -5215,15 +5254,15 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
assertTrue(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_TITLED));
|
||||
fService.removeAspect("main:/a/b/c/foo", ContentModel.ASPECT_TITLED);
|
||||
fService.createSnapshot("main", null, null);
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_TITLED.toString() +"\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_AUDITABLE.toString() +"\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
|
||||
|
||||
fService.getFileOutputStream("main:/a/b/c/foo").close();
|
||||
assertFalse(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_TITLED));
|
||||
assertTrue(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_AUDITABLE));
|
||||
@@ -5567,52 +5606,52 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
avmIndexer.deleteIndex("avmAsynchronousTest", IndexMode.SYNCHRONOUS);
|
||||
}
|
||||
tx.commit();
|
||||
|
||||
|
||||
tx = fTransactionService.getUserTransaction();
|
||||
tx.begin();
|
||||
assertEquals(-1, fIndexingInterceptor.getLastIndexedSnapshot("bananaStoreWoof"));
|
||||
assertEquals(-1, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest"));
|
||||
tx.commit();
|
||||
|
||||
|
||||
// TODO: Suspend and resume indexing in case we are really unlucky and hit an index before we expect it.
|
||||
|
||||
|
||||
SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true);
|
||||
ResultSet results;
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
fService.createStore("avmAsynchronousTest");
|
||||
|
||||
|
||||
tx = fTransactionService.getUserTransaction();
|
||||
tx.begin();
|
||||
assertEquals(0, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest"));
|
||||
tx.commit();
|
||||
|
||||
|
||||
fService.createSnapshot("avmAsynchronousTest", null, null);
|
||||
|
||||
|
||||
tx = fTransactionService.getUserTransaction();
|
||||
tx.begin();
|
||||
assertEquals(0, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest"));
|
||||
tx.commit();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
fService.createDirectory("avmAsynchronousTest:/", "a");
|
||||
fService.createDirectory("avmAsynchronousTest:/a", "b");
|
||||
fService.createDirectory("avmAsynchronousTest:/a/b", "c");
|
||||
|
||||
|
||||
tx = fTransactionService.getUserTransaction();
|
||||
tx.begin();
|
||||
assertEquals(0, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest"));
|
||||
assertTrue(fIndexingInterceptor.isIndexUpToDate("avmAsynchronousTest"));
|
||||
tx.commit();
|
||||
|
||||
|
||||
fService.createSnapshot("avmAsynchronousTest", null, null);
|
||||
|
||||
|
||||
tx = fTransactionService.getUserTransaction();
|
||||
tx.begin();
|
||||
assertEquals(1, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest"));
|
||||
@@ -5624,31 +5663,31 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
assertTrue(fIndexingInterceptor.isSnapshotIndexed("avmAsynchronousTest", 1));
|
||||
assertFalse(fIndexingInterceptor.isSnapshotIndexed("avmAsynchronousTest", 2));
|
||||
tx.commit();
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(1, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
Thread.sleep(180000);
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(4, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
|
||||
|
||||
tx = fTransactionService.getUserTransaction();
|
||||
tx.begin();
|
||||
assertEquals(1, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest"));
|
||||
assertTrue(fIndexingInterceptor.isIndexUpToDate("avmAsynchronousTest"));
|
||||
assertTrue(fIndexingInterceptor.isIndexUpToDateAndSearchable("avmAsynchronousTest"));
|
||||
tx.commit();
|
||||
|
||||
|
||||
fService.purgeStore("avmAsynchronousTest");
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(0, results.length());
|
||||
results.close();
|
||||
|
||||
|
||||
fService.createStore("avmAsynchronousTest");
|
||||
fService.createSnapshot("avmAsynchronousTest", null, null);
|
||||
fService.createDirectory("avmAsynchronousTest:/", "a");
|
||||
@@ -5662,9 +5701,9 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
fService.createDirectory("avmAsynchronousTest:/a", "b");
|
||||
fService.createDirectory("avmAsynchronousTest:/a/b", "c");
|
||||
fService.createSnapshot("avmAsynchronousTest", null, null);
|
||||
|
||||
|
||||
Thread.sleep(180000);
|
||||
|
||||
|
||||
results = searchService.query(storeRef, "lucene", "PATH:\"//.\"");
|
||||
assertEquals(4, results.length());
|
||||
results.close();
|
||||
|
@@ -53,34 +53,34 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
* The layer id.
|
||||
*/
|
||||
private long fLayerID;
|
||||
|
||||
|
||||
/**
|
||||
* The pointer to the underlying directory.
|
||||
*/
|
||||
private String fIndirection;
|
||||
|
||||
|
||||
/**
|
||||
* Whether this is a primary indirection node.
|
||||
*/
|
||||
private boolean fPrimaryIndirection;
|
||||
|
||||
|
||||
/**
|
||||
* Whether this is opaque.
|
||||
*/
|
||||
private boolean fOpacity;
|
||||
|
||||
|
||||
/**
|
||||
* The indirection version.
|
||||
*/
|
||||
private int fIndirectionVersion;
|
||||
|
||||
|
||||
/**
|
||||
* Default constructor. Called by Hibernate.
|
||||
*/
|
||||
protected LayeredDirectoryNodeImpl()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Make a new one from a specified indirection path.
|
||||
* @param indirection The indirection path to set.
|
||||
@@ -111,7 +111,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
copyAspects(toCopy);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Kind of copy constructor, sort of.
|
||||
* @param other The LayeredDirectoryNode we are copied from.
|
||||
@@ -119,7 +119,8 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public LayeredDirectoryNodeImpl(LayeredDirectoryNode other,
|
||||
AVMStore repos)
|
||||
AVMStore repos,
|
||||
Lookup lookup, boolean copyAll)
|
||||
{
|
||||
super(repos.getAVMRepository().issueID(), repos);
|
||||
fIndirection = other.getIndirection();
|
||||
@@ -128,12 +129,20 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
fLayerID = -1;
|
||||
fOpacity = false;
|
||||
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
||||
for (ChildEntry child : AVMDAOs.Instance().fChildEntryDAO.getByParent(other))
|
||||
Map<String, AVMNode> children = null;
|
||||
if (copyAll)
|
||||
{
|
||||
ChildKey key = new ChildKey(this, child.getKey().getName());
|
||||
ChildEntryImpl newChild = new ChildEntryImpl(key,
|
||||
child.getChild());
|
||||
AVMDAOs.Instance().fChildEntryDAO.save(newChild);
|
||||
children = other.getListing(lookup, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
children = other.getListingDirect(lookup, true);
|
||||
}
|
||||
for (Map.Entry<String, AVMNode> child : children.entrySet())
|
||||
{
|
||||
ChildKey key = new ChildKey(this, child.getKey());
|
||||
ChildEntry entry = new ChildEntryImpl(key, child.getValue());
|
||||
AVMDAOs.Instance().fChildEntryDAO.save(entry);
|
||||
}
|
||||
setVersionID(other.getVersionID() + 1);
|
||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||
@@ -141,7 +150,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
copyAspects(other);
|
||||
copyACLs(other);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct one from a PlainDirectoryNode. Called when a COW is performed in a layered
|
||||
* context.
|
||||
@@ -200,12 +209,19 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
fOpacity = false;
|
||||
setVersionID(dir.getVersionID() + 1);
|
||||
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
||||
Map<String, AVMNode> children = dir.getListing(srcLookup, true);
|
||||
for (Map.Entry<String, AVMNode> child : children.entrySet())
|
||||
{
|
||||
ChildKey key = new ChildKey(this, child.getKey());
|
||||
ChildEntry entry = new ChildEntryImpl(key, child.getValue());
|
||||
AVMDAOs.Instance().fChildEntryDAO.save(entry);
|
||||
}
|
||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||
copyProperties(dir);
|
||||
copyAspects(dir);
|
||||
copyACLs(dir);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this a primary indirection node.
|
||||
* @return Whether this is a primary indirection.
|
||||
@@ -214,7 +230,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
return fPrimaryIndirection;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the primary indirection state of this.
|
||||
* @param has Whether this is a primary indirection node.
|
||||
@@ -223,7 +239,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
fPrimaryIndirection = has;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the indirection path.
|
||||
* @return The indirection path.
|
||||
@@ -232,7 +248,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
return fIndirection;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the underlying path in the Lookup's context.
|
||||
* @param lPath The Lookup.
|
||||
@@ -264,7 +280,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
}
|
||||
return lPath.getCurrentIndirectionVersion();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the layer id.
|
||||
* @return The layer id.
|
||||
@@ -273,7 +289,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
return fLayerID;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the layer id.
|
||||
* @param id The id to set.
|
||||
@@ -282,7 +298,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
fLayerID = id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Copy on write logic.
|
||||
* @param lPath
|
||||
@@ -298,7 +314,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
// This means that this is being seen indirectly through the topmost
|
||||
// layer. The following creates a node that will inherit its
|
||||
// indirection from its parent.
|
||||
newMe = new LayeredDirectoryNodeImpl((String)null,
|
||||
newMe = new LayeredDirectoryNodeImpl((String)null,
|
||||
store, this);
|
||||
newMe.setPrimaryIndirection(false);
|
||||
newMe.setLayerID(lPath.getTopLayer().getLayerID());
|
||||
@@ -307,7 +323,9 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
// A simple copy is made.
|
||||
newMe = new LayeredDirectoryNodeImpl(this,
|
||||
store);
|
||||
store,
|
||||
lPath,
|
||||
false);
|
||||
newMe.setLayerID(getLayerID());
|
||||
}
|
||||
newMe.setAncestor(this);
|
||||
@@ -412,7 +430,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
* @param includeDeleted Whether to inlude deleted nodes.
|
||||
* @return A Map of Strings to descriptors.
|
||||
*/
|
||||
public SortedMap<String, AVMNodeDescriptor> getListingDirect(AVMNodeDescriptor dir,
|
||||
public SortedMap<String, AVMNodeDescriptor> getListingDirect(AVMNodeDescriptor dir,
|
||||
boolean includeDeleted)
|
||||
{
|
||||
List<ChildEntry> children = AVMDAOs.Instance().fChildEntryDAO.getByParent(this);
|
||||
@@ -430,14 +448,14 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
}
|
||||
return listing;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a listing from a directory node descriptor.
|
||||
* @param dir The directory node descriptor.
|
||||
* @param includeDeleted Should DeletedNodes be shown.
|
||||
* @return A Map of names to node descriptors.
|
||||
*/
|
||||
public SortedMap<String, AVMNodeDescriptor> getListing(AVMNodeDescriptor dir,
|
||||
public SortedMap<String, AVMNodeDescriptor> getListing(AVMNodeDescriptor dir,
|
||||
boolean includeDeleted)
|
||||
{
|
||||
if (dir.getPath() == null || dir.getIndirection() == null)
|
||||
@@ -500,7 +518,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
}
|
||||
|
||||
/**
|
||||
* Lookup a child by name.
|
||||
* Lookup a child by name.
|
||||
* @param lPath The Lookup.
|
||||
* @param name The name we are looking.
|
||||
* @param version The version in which we are looking.
|
||||
@@ -556,7 +574,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
throw new AVMBadArgumentException("Illegal null argument.");
|
||||
}
|
||||
ChildKey key = new ChildKey(this, name);
|
||||
ChildKey key = new ChildKey(this, name);
|
||||
ChildEntry entry = AVMDAOs.Instance().fChildEntryDAO.get(key);
|
||||
if (entry != null)
|
||||
{
|
||||
@@ -627,7 +645,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
child = temp.getFirst();
|
||||
}
|
||||
indirect = true;
|
||||
indirect = true;
|
||||
}
|
||||
if (child != null && (indirect || child.getStoreNew() == null || child.getAncestor() != null))
|
||||
{
|
||||
@@ -644,7 +662,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the type of this node.
|
||||
* @return The type of this node.
|
||||
@@ -663,7 +681,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
{
|
||||
return "[LD:" + getId() + ":" + getUnderlying(lPath) + "]";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the primary indirection. No COW.
|
||||
* @param path The indirection path.
|
||||
@@ -677,7 +695,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
fIndirection = path;
|
||||
fPrimaryIndirection = true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Make this node become a primary indirection. COW.
|
||||
* @param lPath The Lookup.
|
||||
@@ -704,7 +722,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
}
|
||||
rawSetPrimary(target);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Let anything behind name in this become visible.
|
||||
* @param lPath The Lookup.
|
||||
@@ -727,7 +745,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
AVMDAOs.Instance().fChildEntryDAO.delete(entry);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the descriptor for this node.
|
||||
* @param lPath The Lookup.
|
||||
@@ -798,7 +816,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
fPrimaryIndirection,
|
||||
fLayerID,
|
||||
fOpacity,
|
||||
-1,
|
||||
-1,
|
||||
-1);
|
||||
}
|
||||
|
||||
@@ -822,7 +840,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
}
|
||||
else
|
||||
{
|
||||
indirection = parentIndirection.endsWith("/") ? parentIndirection + name :
|
||||
indirection = parentIndirection.endsWith("/") ? parentIndirection + name :
|
||||
parentIndirection + "/" + name;
|
||||
indirectionVersion = parentIndirectionVersion;
|
||||
}
|
||||
@@ -929,7 +947,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
ChildEntry newChild = new ChildEntryImpl(key, node);
|
||||
AVMDAOs.Instance().fChildEntryDAO.save(newChild);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove name without leaving behind a deleted node.
|
||||
* @param name The name of the child to flatten.
|
||||
@@ -962,7 +980,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
fIndirectionVersion = version;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the indirection version.
|
||||
* @return The indirection version.
|
||||
|
Reference in New Issue
Block a user