Skip to content
This repository has been archived by the owner on Nov 30, 2021. It is now read-only.

Commit

Permalink
GUVNOR-475: Import/Export not working with shareable nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
jervisliu committed Sep 10, 2011
1 parent b3c489b commit 949199b
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -323,11 +323,8 @@ public AssetItem addAssetImportedFromGlobalArea(String sharedAssetName) {
Workspace workspace = session.getWorkspace();
PackageItem globalArea = rulesRepository.loadGlobalArea();
AssetItem globalAssetItem = globalArea.loadAsset(sharedAssetName);
if (!hasMixin(globalAssetItem.getNode())) {
globalAssetItem.checkout();
globalAssetItem.getNode().addMixin("mix:shareable");
globalAssetItem.checkin("add mix:shareable");
}

ensureMixinType(globalAssetItem, "mix:shareable");

String path = rulesFolder.getPath() + "/" + globalAssetItem.getName();
workspace.clone(workspace.getName(),
Expand All @@ -350,6 +347,20 @@ public AssetItem addAssetImportedFromGlobalArea(String sharedAssetName) {

}

public static void ensureMixinType(AssetItem assetItem, String mixin)
throws RepositoryException {
if (!assetItem.getNode().isNodeType(mixin)) {
if (assetItem.getNode().canAddMixin(mixin)) {
assetItem.checkout();
assetItem.getNode().addMixin(mixin);
assetItem.checkin("add " + mixin);
} else {
throw new RulesRepositoryException(assetItem.getNode().getPath()
+ " does not support adding " + mixin);
}
}
}

private boolean hasMixin(Node node) {
try {
NodeType[] nodeTypes = node.getMixinNodeTypes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,18 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.jcr.*;
//import javax.jcr.*;
import javax.jcr.ImportUUIDBehavior;
import javax.jcr.InvalidItemStateException;
import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryResult;
import java.io.*;
Expand Down Expand Up @@ -1284,7 +1295,7 @@ public void importRulesRepositoryFromStream(InputStream instream) {
new RulesRepositoryAdministrator(this.session).clearRulesRepository();
this.session.getWorkspace().importXML("/",
instream,
ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
session.save();
MigrateDroolsPackage mig = new MigrateDroolsPackage();
if (mig.needsMigration(this)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
Expand All @@ -28,6 +32,7 @@
import java.util.Map;
import java.util.Random;

import javax.jcr.ImportUUIDBehavior;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
Expand Down Expand Up @@ -1224,19 +1229,19 @@ public void testShareableNodesWithQuery() throws Exception {
assertTrue(list.get( 0 ) instanceof AssetItem);
}

//GUVNOR-475
@Test
@Ignore("Due to GUVNOR-475.")
public void testImportExportWithShareableNodes() throws Exception {
RulesRepository repo = getRepo();
AssetItem item = repo.loadDefaultPackage().addAsset("testImportExportShareableNodeOriginal", "desc");
item.updateContent("la");
item.getNode().addMixin("mix:shareable");
PackageItem.ensureMixinType(item, "mix:shareable");
PackageItem source = repo.createPackage("testImportExportShareableNodesPackage", "desc");
repo.save();

source.checkout();

Session session = repo.getSession();
Session session = item.getNode().getSession();
Workspace workspace = session.getWorkspace();
String path = "/drools:repository/drools:package_area/testImportExportShareableNodesPackage/assets/testImportExportShareableNodeShared";
workspace.clone(workspace.getName(), item.getNode().getPath(), path, false);
Expand All @@ -1255,6 +1260,67 @@ public void testImportExportWithShareableNodes() throws Exception {
assertTrue(repo.loadPackage("testImportExportShareableNodesPackage").containsAsset("testImportExportShareableNodeOriginal"));
}

@Test
public void testImportExportWithShareableNodesOnJCRLayer() throws Exception {
RulesRepository repo = getRepo();
Node testRootNode = getRepo().getSession().getRootNode().addNode("testRoot");
getRepo().getSession().getRootNode().save();

// setup parent nodes and first child
Node a1 = testRootNode.addNode("a1");
Node a2 = testRootNode.addNode("a2");
Node a3 = testRootNode.addNode("a3");
Node b1 = a1.addNode("b1");
testRootNode.save();

// add mixin
ensureMixinType(b1, "mix:shareable");
b1.save();

// clone
Session session = b1.getSession();
Workspace workspace = session.getWorkspace();
workspace.clone(workspace.getName(), b1.getPath(),
a2.getPath() + "/b2", false);

// add child c to shareable nodes b1 & b2
b1.addNode("c");
b1.save();

// create temp file
File tmpFile = File.createTempFile("test", null);
tmpFile.deleteOnExit();

// export system view of /a1/b1
OutputStream out = new FileOutputStream(tmpFile);
try {
session.exportSystemView(testRootNode.getPath(), out, false, false);
} finally {
out.close();
}

// and import again underneath /a3
InputStream in = new FileInputStream(tmpFile);
try {
session.getWorkspace().importXML("/", in, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
session.save();
} finally {
try { in.close(); } catch (IOException ignore) {}
}
}

protected void ensureMixinType(Node node, String mixin)
throws RepositoryException {
if (!node.isNodeType(mixin)) {
if (node.canAddMixin(mixin)) {
node.addMixin(mixin);
} else {
throw new RepositoryException(node.getPath()
+ " does not support adding " + mixin);
}
}
}

//In this test case we expect an ItemExistException from the second thread,
//other than ending up with two packages with same name.
//https://jira.jboss.org/jira/browse/GUVNOR-346
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,8 @@ private void generateGetRegisteredModuleEditorFormatsMethod( SourceWriter source
private void generateGetRegisteredPerspectiveTypesMethod( SourceWriter sourceWriter, Map<String, List<ModuleEditorConfiguration>> registeredEditors ) {
sourceWriter.println( "public String[] getRegisteredPerspectiveTypes() {" );
sourceWriter.indent();
sourceWriter.println( "String[] formats = new String[] {\"author\", \"runtime\", \"soaservice\"};" );
//sourceWriter.println( "String[] formats = new String[] {\"author\", \"runtime\"};" );
//sourceWriter.println( "String[] formats = new String[] {\"author\", \"runtime\", \"soaservice\"};" );
sourceWriter.println( "String[] formats = new String[] {\"author\", \"runtime\"};" );

sourceWriter.println( "return formats;" );
sourceWriter.outdent();
Expand Down

0 comments on commit 949199b

Please sign in to comment.