mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.2 to HEAD
15897: Merged V3.1 to V3.2 14485: (RECORD ONLY) ETHREEOH-1937 14915: (RECORD ONLY) Fix for ETHREEOH-2011: chaining-authentication-context.xml.sample 14954: (RECORD ONLY) Fix merge error 14966: (RECORD ONLY) Merged V2.2 to V3.1 14131: *RECORD ONLY* 14605: Merged HEAD to V2.2 (workaround for ETWOTWO-1137) 14368: Fix for ETHREEOH-1936 14607: Fixed NPE in TextMiningContentTransformer: Lead-up to fix for ETWOTWO-1174 14992: (RECORD ONLY) Updated svn:mergeinfo for V2.1-A 15080: Applied suggested fix for ETHREEOH-2252: Emailed content created in wrong space 15131: Merged V2.1-A to V3.1 (ETHREEOH-2270) 13465: Fix for ADB-161 ACT 7870 - added 'xsd' to mimetype map. 15134: Merged V2.2 to V3.1 14332: (RECORD-ONLY) 14717: (RECORD-ONLY) 14745: (RECORD-ONLY) 14746: Fixed error relating to detection and clean-up of duplicate child associations 14759: Missed check-in: Set transactionService for post-transaction duplicate child assoc cleanup 14761: (RECORD-ONLY) 14885: (RECORD-ONLY) 14893: (RECORD-ONLY) 14903: (RECORD-ONLY) 15204: Fixed ETHREEOH-2303: FixNameCrcValuesPatch throws ConstraintViolationException during upgrade ... 15214: Fixed ETHREEOH-1861: Offline synchronization updates file content without any changes 15271: Applied patch fix: Imported users don't conform to case-sensitivity switch 15352: ETHREEOH-2322 15361: ETHREEOH-1112 15369: ETHREEOH-2448 15419: ETHREEOH-2479 15431: ETHREEOH-2520 and ETHREEOH-2521 15587: (RECORD ONLY) Moved Enterprise-only scripts to correct location 15616: Fix ETHREEOH-2581 - WCM layered folder - can't submit deleted file 15675: WCM fixes (ETHREEOH-2110 & ETHREEOH-2645) 15836: Check for null username in ContentUsage service getUserUsage() method 15840: (RECORD ONLY) Merged V3.2 to V3.1 14760: Fix for ALFCOM-586 - trims and ignores leading/trailing whitespace before validation in JSF client forms. 15841: Fixes for ETHREEOH-2702 and ETHREEOH-2687 15860: (RECORD ONLY) Added Oracle and MS SQL Server config 15891: Removed unused compiler directive ___________________________________________________________________ Modified: svn:mergeinfo Merged /alfresco/BRANCHES/DEV/BELARUS/ETHREEOH-2221:r14753 Merged /alfresco/BRANCHES/V2.1-A: lots Merged /alfresco/BRANCHES/V2.2:r14131,14332,14605,14607,14717,14745-14746,14759,14761,14885,14893,14903 Merged /alfresco/BRANCHES/V3.1:r14485,14915,14954,14966,14992,15080,15131,15134,15204,15214,15271,15352,15361,15369,15419,15431,15587,15616,15675,15818,15836,15840-15841,15860,15891 Merged /alfresco/BRANCHES/V3.2:r15897 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16886 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1389,7 +1389,7 @@ public class AVMServiceLocalTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public void testLayeredFolder_DeleteFile_mimic_ETHREEOH_2297() throws Exception
|
||||
public void testLayeredFolderDeleteFile1() throws Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -1480,7 +1480,7 @@ public class AVMServiceLocalTest extends TestCase
|
||||
recursiveList("mainA");
|
||||
recursiveList("mainB");
|
||||
|
||||
// note: short-cut - removed directly from "staging" area (don't bother with sandbox mainA--layer for now)
|
||||
// delete file - note: short-cut - removed directly from "staging" area (don't bother with sandbox mainA--layer for now)
|
||||
fService.removeNode("mainA:/a/b", "foo");
|
||||
|
||||
fService.createSnapshot("mainA", null, null);
|
||||
@@ -1521,6 +1521,138 @@ public class AVMServiceLocalTest extends TestCase
|
||||
fService.purgeStore("mainB--layer");
|
||||
}
|
||||
}
|
||||
|
||||
public void testLayeredFolderDeleteFile2() throws Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
fService.createStore("mainA");
|
||||
fService.createStore("mainB");
|
||||
|
||||
fService.createDirectory("mainA:/", "a");
|
||||
fService.createDirectory("mainA:/a", "b");
|
||||
|
||||
fService.createDirectory("mainB:/", "a");
|
||||
|
||||
fService.createStore("mainB--layer");
|
||||
|
||||
fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a");
|
||||
|
||||
// note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now)
|
||||
fService.createFile("mainA:/a/b", "foo");
|
||||
|
||||
PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo"));
|
||||
out.println("I am mainA:/a/b/foo");
|
||||
out.close();
|
||||
|
||||
logger.debug("created file: mainA:/a/b/c/foo");
|
||||
|
||||
recursiveList("mainA");
|
||||
recursiveList("mainB");
|
||||
recursiveList("mainB--layer");
|
||||
|
||||
// create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to ,mainA:/a/b)
|
||||
fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b");
|
||||
|
||||
fService.createSnapshot("mainA", null, null);
|
||||
fService.createSnapshot("mainB", null, null);
|
||||
|
||||
logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b");
|
||||
|
||||
recursiveList("mainB");
|
||||
recursiveList("mainB--layer");
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo")));
|
||||
String line = reader.readLine();
|
||||
reader.close();
|
||||
assertEquals("I am mainA:/a/b/foo", line);
|
||||
|
||||
out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/foo"));
|
||||
out.println("I am mainB--layer:/a/b/foo");
|
||||
out.close();
|
||||
|
||||
fService.createSnapshot("mainB--layer", null, null);
|
||||
|
||||
logger.debug("updated file: mainB--layer:/a/b/foo");
|
||||
|
||||
recursiveList("mainB");
|
||||
recursiveList("mainB--layer");
|
||||
|
||||
reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/b/foo")));
|
||||
line = reader.readLine();
|
||||
reader.close();
|
||||
assertEquals("I am mainA:/a/b/foo", line);
|
||||
|
||||
reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo")));
|
||||
line = reader.readLine();
|
||||
reader.close();
|
||||
assertEquals("I am mainA:/a/b/foo", line);
|
||||
|
||||
reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo")));
|
||||
line = reader.readLine();
|
||||
reader.close();
|
||||
assertEquals("I am mainB--layer:/a/b/foo", line);
|
||||
|
||||
List<AVMDifference> diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null);
|
||||
assertEquals(1, diffs.size());
|
||||
assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString());
|
||||
|
||||
fSyncService.update(diffs, null, false, false, false, false, "one", "one");
|
||||
fSyncService.flatten("mainB--layer:/a", "mainB:/a");
|
||||
|
||||
logger.debug("updated: created file: mainB:/a/b/foo");
|
||||
|
||||
recursiveList("mainB");
|
||||
recursiveList("mainB--layer");
|
||||
|
||||
reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo")));
|
||||
line = reader.readLine();
|
||||
reader.close();
|
||||
assertEquals("I am mainB--layer:/a/b/foo", line);
|
||||
|
||||
recursiveList("mainA");
|
||||
recursiveList("mainB");
|
||||
|
||||
// delete folder - note: short-cut - remove directly from "staging" area (don't bother with sandbox mainA--layer for now)
|
||||
fService.removeNode("mainA:/a", "b");
|
||||
|
||||
fService.createSnapshot("mainA", null, null);
|
||||
|
||||
logger.debug("removed file: mainA:/a/b/foo");
|
||||
|
||||
recursiveList("mainA");
|
||||
recursiveList("mainB");
|
||||
recursiveList("mainB--layer");
|
||||
|
||||
fService.removeNode("mainB--layer:/a/b", "foo");
|
||||
|
||||
diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null);
|
||||
assertEquals(1, diffs.size());
|
||||
assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString());
|
||||
|
||||
fSyncService.update(diffs, null, false, false, false, false, "one", "one");
|
||||
fSyncService.flatten("mainB--layer:/a", "mainB:/a");
|
||||
|
||||
fService.createSnapshot("mainB", null, null);
|
||||
|
||||
logger.debug("updated: removed file: mainB:/a/b/foo");
|
||||
|
||||
recursiveList("mainA");
|
||||
recursiveList("mainB");
|
||||
recursiveList("mainB--layer");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace(System.err);
|
||||
throw e;
|
||||
}
|
||||
finally
|
||||
{
|
||||
fService.purgeStore("mainA");
|
||||
fService.purgeStore("mainB");
|
||||
fService.purgeStore("mainB--layer");
|
||||
}
|
||||
}
|
||||
|
||||
protected void recursiveContents(String path)
|
||||
{
|
||||
|
@@ -1746,17 +1746,15 @@ public class AVMStoreImpl implements AVMStore
|
||||
|
||||
Lookup cPath = new Lookup(lPath, AVMDAOs.Instance().fAVMNodeDAO, AVMDAOs.Instance().fAVMStoreDAO);
|
||||
Pair<AVMNode, Boolean> result = dir.lookupChild(cPath, name, true);
|
||||
if (result == null)
|
||||
if (result != null)
|
||||
{
|
||||
throw new AVMNotFoundException("Path " + parentPath + "/" +name + " not found.");
|
||||
AVMNode child = result.getFirst();
|
||||
if (!fAVMRepository.can(null, child, PermissionService.WRITE, cPath.getDirectlyContained()))
|
||||
{
|
||||
throw new AccessDeniedException("Not allowed to update node: " + parentPath + "/" +name );
|
||||
}
|
||||
dir.removeChild(lPath, name);
|
||||
}
|
||||
AVMNode child = result.getFirst();
|
||||
if (!fAVMRepository.can(null, child, PermissionService.WRITE, cPath.getDirectlyContained()))
|
||||
{
|
||||
throw new AccessDeniedException("Not allowed to update node: " + parentPath + "/" +name );
|
||||
}
|
||||
|
||||
dir.removeChild(lPath, name);
|
||||
dir.link(lPath, name, toLink);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user