Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-02-20 10:11:12 +0000
committerEike Stepper2015-02-20 13:34:31 +0000
commit3ecac9ab191d0abea9dfb3a28c4d5803620465f4 (patch)
tree82f21c28133f4e2ba4fb8b5189aba465398707b0
parentce3df424d86c68f64716b07e9f646bf07df0550b (diff)
downloadcdo-3ecac9ab191d0abea9dfb3a28c4d5803620465f4.tar.gz
cdo-3ecac9ab191d0abea9dfb3a28c4d5803620465f4.tar.xz
cdo-3ecac9ab191d0abea9dfb3a28c4d5803620465f4.zip
[458349] Consolidate UI
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOCommonUtil.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageUnit.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelDecorator.java86
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java11
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/repositories/CDORepository.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractElement.java16
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutProperties.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/OfflineCDOCheckout.java16
-rw-r--r--plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java166
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/properties/Property.java13
17 files changed, 258 insertions, 136 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOCommonUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOCommonUtil.java
index dc045b9316..6c32488a7e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOCommonUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOCommonUtil.java
@@ -27,6 +27,7 @@ import org.eclipse.emf.cdo.spi.common.protocol.CDODataInputImpl;
import org.eclipse.emf.cdo.spi.common.protocol.CDODataOutputImpl;
import org.eclipse.emf.cdo.spi.common.revision.CDORevisionUnchunker;
+import org.eclipse.net4j.util.StringUtil;
import org.eclipse.net4j.util.event.IEvent;
import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.event.INotifier;
@@ -66,7 +67,9 @@ public final class CDOCommonUtil
{
public int compare(CDONameProvider o1, CDONameProvider o2)
{
- return o1.getName().compareTo(o2.getName());
+ String n1 = StringUtil.safe(o1.getName()).toLowerCase();
+ String n2 = StringUtil.safe(o2.getName()).toLowerCase();
+ return n1.compareTo(n2);
}
};
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
index 93944767c9..b62c22ca21 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
@@ -99,6 +99,15 @@ public class CDOPackageInfoImpl implements InternalCDOPackageInfo
}
}
+ public InternalCDOPackageInfo copy()
+ {
+ InternalCDOPackageInfo packageInfo = (InternalCDOPackageInfo)CDOModelUtil.createPackageInfo();
+ packageInfo.setPackageURI(getPackageURI());
+ packageInfo.setParentURI(getParentURI());
+ packageInfo.setEPackage(getEPackage());
+ return packageInfo;
+ }
+
public EFactory getEFactory()
{
return getEPackage().getEFactoryInstance();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
index eb63803cd2..0440b8f50a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
@@ -329,6 +329,25 @@ public class CDOPackageUnitImpl implements InternalCDOPackageUnit
}
}
+ public InternalCDOPackageUnit copy()
+ {
+ InternalCDOPackageUnit packageUnit = (InternalCDOPackageUnit)CDOModelUtil.createPackageUnit();
+
+ InternalCDOPackageInfo[] thesePackageInfos = getPackageInfos();
+ InternalCDOPackageInfo[] packageInfos = new InternalCDOPackageInfo[thesePackageInfos.length];
+ for (int i = 0; i < thesePackageInfos.length; i++)
+ {
+ packageInfos[i] = thesePackageInfos[i].copy();
+ packageInfos[i].setPackageUnit(packageUnit);
+ }
+
+ packageUnit.setPackageInfos(packageInfos);
+ packageUnit.setOriginalType(getOriginalType());
+ packageUnit.setState(getState());
+ packageUnit.setTimeStamp(getTimeStamp());
+ return packageUnit;
+ }
+
public int compareTo(CDOPackageUnit o)
{
return getID().compareTo(o.getID());
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java
index dd195cf981..436204c3f6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageInfo.java
@@ -51,4 +51,9 @@ public interface InternalCDOPackageInfo extends CDOPackageInfo, Adapter.Internal
* @since 3.0
*/
public void read(CDODataInput in) throws IOException;
+
+ /**
+ * @since 4.4
+ */
+ public InternalCDOPackageInfo copy();
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageUnit.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageUnit.java
index 7daaff537d..92135dabce 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageUnit.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageUnit.java
@@ -68,6 +68,11 @@ public interface InternalCDOPackageUnit extends CDOPackageUnit
*/
public void read(CDODataInput in, ResourceSet resourceSet) throws IOException;
+ /**
+ * @since 4.4
+ */
+ public InternalCDOPackageUnit copy();
+
public void init(EPackage ePackage);
public void dispose();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java
index d595d233e4..e12220e516 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java
@@ -185,7 +185,13 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl
public CDOBranch readCDOBranch() throws IOException
{
int branchID = readInt();
- return getBranchManager().getBranch(branchID);
+ CDOBranch branch = getBranchManager().getBranch(branchID);
+ if (branch == null)
+ {
+ throw new IOException("Branch not found: " + branchID);
+ }
+
+ return branch;
}
public CDOBranchPoint readCDOBranchPoint() throws IOException
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelDecorator.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelDecorator.java
index 2854eb62ef..dd04ffede6 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelDecorator.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelDecorator.java
@@ -16,8 +16,11 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.ui.BaseLabelDecorator;
+import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
import org.eclipse.net4j.util.AdapterUtil;
+import org.eclipse.net4j.util.lifecycle.LifecycleException;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
/**
* @author Eike Stepper
@@ -31,54 +34,69 @@ public class CDOCheckoutLabelDecorator extends BaseLabelDecorator
@Override
public String decorateText(String text, Object element)
{
- CDOElement cdoElement = AdapterUtil.adapt(element, CDOElement.class);
- if (cdoElement != null)
+ try
{
- element = cdoElement.getDelegate();
- }
-
- if (element instanceof CDOCheckout)
- {
- CDOCheckout checkout = (CDOCheckout)element;
-
- if (checkout.isOpen())
+ CDOElement cdoElement = AdapterUtil.adapt(element, CDOElement.class);
+ if (cdoElement != null)
{
- CDOBranch branch = checkout.getView().getBranch();
- String branchPath = branch.getPathName();
- if (branchPath.startsWith(CDOBranch.MAIN_BRANCH_NAME))
- {
- branchPath = branchPath.substring(CDOBranch.MAIN_BRANCH_NAME.length());
- }
+ element = cdoElement.getDelegate();
+ }
- if (branchPath.startsWith(CDOBranch.PATH_SEPARATOR))
+ if (element instanceof CDOCheckout)
+ {
+ CDOCheckout checkout = (CDOCheckout)element;
+ if (checkout.isOpen())
{
- branchPath = branchPath.substring(CDOBranch.PATH_SEPARATOR.length());
- }
+ String branchPath = checkout.getBranchPath();
+ if (branchPath != null)
+ {
+ if (branchPath.startsWith(CDOBranch.MAIN_BRANCH_NAME))
+ {
+ branchPath = branchPath.substring(CDOBranch.MAIN_BRANCH_NAME.length());
+ }
- if (branchPath.length() != 0)
- {
- text += " " + branchPath;
- }
+ if (branchPath.startsWith(CDOBranch.PATH_SEPARATOR))
+ {
+ branchPath = branchPath.substring(CDOBranch.PATH_SEPARATOR.length());
+ }
- long timeStamp = checkout.getTimeStamp();
- if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE)
- {
- text += " " + CDOCommonUtil.formatTimeStamp(timeStamp);
- }
+ if (branchPath.length() != 0)
+ {
+ text += " [" + branchPath + "]";
+ }
+ }
- if (checkout.isOffline())
- {
- if (checkout.isDirty())
+ long timeStamp = checkout.getTimeStamp();
+ if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE)
{
- text += " dirty";
+ text += " " + CDOCommonUtil.formatTimeStamp(timeStamp);
}
- else
+
+ if (checkout.isOffline())
{
- text += " clean";
+ if (checkout.isDirty())
+ {
+ text += " dirty";
+ }
+ else
+ {
+ text += " clean";
+ }
}
}
}
}
+ catch (LifecycleException ex)
+ {
+ //$FALL-THROUGH$
+ }
+ catch (Throwable ex)
+ {
+ if (LifecycleUtil.isActive(element))
+ {
+ OM.LOG.error(ex);
+ }
+ }
return text;
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java
index 74e088aa1b..b49687f83b 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java
@@ -82,7 +82,7 @@ public class ExplorerUIAdapterFactory implements IAdapterFactory
{
EObject eObject = (EObject)adaptableObject;
CDOCheckout checkout = CDOExplorerUtil.getCheckout(eObject);
- if (checkout instanceof StateProvider)
+ if (checkout != null)
{
return checkout;
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java
index ffb63a8289..3f8eec66db 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java
@@ -12,7 +12,6 @@ package org.eclipse.emf.cdo.explorer.ui.repositories;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
-import org.eclipse.emf.cdo.common.util.CDONameProvider;
import org.eclipse.emf.cdo.common.util.CDOTimeProvider;
import org.eclipse.emf.cdo.explorer.CDOExplorerManager;
import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
@@ -175,19 +174,19 @@ public class CDORepositoryItemProvider extends ContainerItemProvider<IContainer<
}
else if (element instanceof CDORepositoryManager)
{
- List<CDONameProvider> nameProviders = new ArrayList<CDONameProvider>();
+ List<CDORepository> repositories = new ArrayList<CDORepository>();
Object[] children = super.getChildren(element);
for (Object child : children)
{
- if (child instanceof CDONameProvider)
+ if (child instanceof CDORepository)
{
- nameProviders.add((CDONameProvider)child);
+ repositories.add((CDORepository)child);
}
}
- Collections.sort(nameProviders, CDOCommonUtil.NAME_COMPARATOR);
- return nameProviders.toArray();
+ Collections.sort(repositories);
+ return repositories.toArray();
}
List<CDOTimeProvider> timeProviders = new ArrayList<CDOTimeProvider>();
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java
index 8de20b3977..c3a18b7362 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java
@@ -47,6 +47,8 @@ public interface CDOCheckout extends CDOExplorerElement, CDOTimeProvider, StateP
public void setBranchID(int branchID);
+ public String getBranchPath();
+
public long getTimeStamp();
public void setTimeStamp(long timeStamp);
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/repositories/CDORepository.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/repositories/CDORepository.java
index 8ed522ce9d..ec64434200 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/repositories/CDORepository.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/repositories/CDORepository.java
@@ -11,7 +11,6 @@
package org.eclipse.emf.cdo.explorer.repositories;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
-import org.eclipse.emf.cdo.common.util.CDONameProvider;
import org.eclipse.emf.cdo.explorer.CDOExplorerElement;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.session.CDOSession;
@@ -25,7 +24,7 @@ import org.eclipse.net4j.util.container.IContainer;
* @author Eike Stepper
* @since 4.4
*/
-public interface CDORepository extends CDOExplorerElement, IContainer<CDOBranch>, CDONameProvider, CDOSessionProvider
+public interface CDORepository extends CDOExplorerElement, IContainer<CDOBranch>, CDOSessionProvider
{
public static final String TYPE_REMOTE = "remote";
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractElement.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractElement.java
index c5f80b9330..9a471323b2 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractElement.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractElement.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.emf.cdo.internal.explorer;
+import org.eclipse.emf.cdo.common.util.CDONameProvider;
import org.eclipse.emf.cdo.explorer.CDOExplorerElement;
import org.eclipse.emf.cdo.internal.explorer.bundle.OM;
@@ -144,6 +145,17 @@ public abstract class AbstractElement extends Notifier implements CDOExplorerEle
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object getAdapter(Class adapter)
{
+ if (adapter == CDONameProvider.class)
+ {
+ return new CDONameProvider()
+ {
+ public String getName()
+ {
+ return label;
+ }
+ };
+ }
+
return AdapterUtil.adapt(this, adapter, false);
}
@@ -204,8 +216,8 @@ public abstract class AbstractElement extends Notifier implements CDOExplorerEle
public int compareTo(CDOExplorerElement o)
{
- String label1 = StringUtil.safe(label);
- String label2 = StringUtil.safe(o.getLabel());
+ String label1 = StringUtil.safe(label).toLowerCase();
+ String label2 = StringUtil.safe(o.getLabel()).toLowerCase();
return label1.compareTo(label2);
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java
index 618496f3d9..de07d5a9c4 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java
@@ -115,6 +115,25 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec
this.branchID = branchID;
}
+ public String getBranchPath()
+ {
+ if (view == null)
+ {
+ return null;
+ }
+
+ if (view != null)
+ {
+ CDOBranch branch = view.getBranch();
+ if (branch != null)
+ {
+ return branch.getPathName();
+ }
+ }
+
+ return null;
+ }
+
public final long getTimeStamp()
{
return timeStamp;
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutProperties.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutProperties.java
index 1a24053ef9..5e58bd7523 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutProperties.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutProperties.java
@@ -16,7 +16,6 @@ import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout.ObjectType;
import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
import org.eclipse.emf.cdo.internal.explorer.AbstractElement;
import org.eclipse.emf.cdo.internal.explorer.repositories.CDORepositoryProperties;
-import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.properties.DefaultPropertyTester;
import org.eclipse.net4j.util.properties.IProperties;
@@ -123,13 +122,7 @@ public class CDOCheckoutProperties extends Properties<CDOCheckout>
@Override
protected Object eval(CDOCheckout checkout)
{
- CDOView view = checkout.getView();
- if (view != null)
- {
- return view.getBranch();
- }
-
- return null;
+ return checkout.getBranchPath();
}
});
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/OfflineCDOCheckout.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/OfflineCDOCheckout.java
index 64c866d0ad..1caf577f90 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/OfflineCDOCheckout.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/OfflineCDOCheckout.java
@@ -113,8 +113,24 @@ public class OfflineCDOCheckout extends CDOCheckoutImpl
return workspace.isDirty();
}
+ @Override
+ public String getBranchPath()
+ {
+ if (workspace == null)
+ {
+ return null;
+ }
+
+ return workspace.getBranchPath();
+ }
+
public CDOState getState(Object object)
{
+ if (object == this)
+ {
+ return isDirty() ? CDOState.DIRTY : CDOState.CLEAN;
+ }
+
if (workspace == null)
{
return null;
diff --git a/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java b/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java
index 3bd31266b7..f86d98aae5 100644
--- a/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java
+++ b/plugins/org.eclipse.emf.cdo.workspace/src/org/eclipse/emf/cdo/internal/workspace/CDOWorkspaceImpl.java
@@ -134,9 +134,11 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
private InternalRepository localRepository;
+ private CDOBranchPoint localRepositoryHead;
+
private InternalCDOSession localSession;
- private CDOBranchPoint head;
+ private CDOBranchPoint localSessionHead;
private int branchID = NO_BRANCH_ID;
@@ -194,26 +196,30 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
try
{
- localRepository.setRootResourceID(remoteSession.getRepositoryInfo().getRootResourceID());
+ CDOID rootResourceID = remoteSession.getRepositoryInfo().getRootResourceID();
+ localRepository.setRootResourceID(rootResourceID);
- InternalCDOPackageUnit[] packageUnits = remoteSession.getPackageRegistry().getPackageUnits(true);
- InternalCDOPackageRegistry packageRegistry = localRepository.getPackageRegistry(false);
- for (InternalCDOPackageUnit packageUnit : packageUnits)
+ InternalCDOPackageRegistry localPackageRegistry = localRepository.getPackageRegistry(false);
+ InternalCDOPackageUnit[] remotePackageUnits = remoteSession.getPackageRegistry().getPackageUnits(true);
+ for (InternalCDOPackageUnit remotePackageUnit : remotePackageUnits)
{
- packageRegistry.putPackageUnit(packageUnit);
+ InternalCDOPackageUnit localPackageUnit = remotePackageUnit.copy();
+ localPackageRegistry.putPackageUnit(localPackageUnit);
}
- accessor.rawStore(packageUnits, monitor);
+ accessor.rawStore(remotePackageUnits, monitor);
CDORevisionHandler handler = new CDORevisionHandler()
{
- public boolean handleRevision(CDORevision revision)
+ public boolean handleRevision(CDORevision remoteRevision)
{
- InternalCDORevision rev = (InternalCDORevision)revision;
- adjustRevisionBranch(rev, localRepository.getBranchManager());
- accessor.rawStore(rev, monitor);
+ // Local session revisions are not cached and can directly be modified and stored in the local repository.
+ InternalCDORevision repositoryRevision = (InternalCDORevision)remoteRevision;
+ repositoryRevision.setBranchPoint(localRepositoryHead);
+
+ accessor.rawStore(repositoryRevision, monitor);
- long commitTime = revision.getTimeStamp();
+ long commitTime = remoteRevision.getTimeStamp();
if (commitTime > timeStamp)
{
timeStamp = commitTime;
@@ -245,7 +251,6 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
}
finally
{
- remoteSession.getPackageRegistry().clear();
closeRemoteSession(remoteSession);
}
@@ -270,6 +275,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
try
{
localRepository = createLocalRepository(localRepositoryName, local);
+ localRepositoryHead = localRepository.getBranchManager().getMainBranch().getHead();
this.base = base;
this.base.init(this);
@@ -565,7 +571,10 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
else
{
// Detached
- base.registerChangedOrDetachedObject((InternalCDORevision)remoteRevision);
+ InternalCDORevision baseRevision = ((InternalCDORevision)remoteRevision).copy();
+ baseRevision.setBranchPoint(localSessionHead);
+
+ base.registerChangedOrDetachedObject(baseRevision);
}
}
else
@@ -584,7 +593,10 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
if (!delta.isEmpty())
{
// Changed
- base.registerChangedOrDetachedObject((InternalCDORevision)remoteRevision);
+ InternalCDORevision baseRevision = ((InternalCDORevision)remoteRevision).copy();
+ baseRevision.setBranchPoint(localSessionHead);
+
+ base.registerChangedOrDetachedObject(baseRevision);
}
}
}
@@ -656,7 +668,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
public void revert(CDOChangeSetData revertData)
{
- final CDOBranch localBranch = head.getBranch();
+ final CDOBranch localBranch = localSessionHead.getBranch();
IStoreAccessor.Raw accessor = getLocalWriter(null);
StoreThreadLocal.setAccessor(accessor);
@@ -678,6 +690,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
accessor.rawDelete(id, v, localBranch, eClass, new Monitor());
}
+ // Base revisions have the correct branch point and can directly be stored in the local repository.
accessor.rawStore(baseRevision, new Monitor());
}
@@ -701,7 +714,8 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
SyntheticCDORevision[] synthetics = { null };
InternalCDORevisionManager revisionManager = localSession.getRevisionManager();
- revisionManager.getRevision(id, head, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true, synthetics);
+ revisionManager
+ .getRevision(id, localSessionHead, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true, synthetics);
int max = synthetics[0].getVersion();
EClass eClass = synthetics[0].getEClass();
@@ -713,6 +727,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
accessor.rawDelete(id, version, localBranch, eClass, new Monitor());
}
+ // Base revisions have the correct branch point and can directly be stored in the local repository.
accessor.rawStore(baseRevision, new Monitor());
}
@@ -734,7 +749,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
if (revisions.containsKey(id))
{
InternalCDORevision newRevision = baseRevision.copy();
- adjustRevisionBranch(newRevision, localSession.getBranchManager());
+ newRevision.setBranchPoint(localSessionHead);
result.addChangedObject(newRevision);
}
@@ -745,7 +760,6 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
result.addDetachedObject(key);
}
- localSession.getRevisionManager().getCache().clear();
return result;
}
});
@@ -771,8 +785,8 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
try
{
- InternalCDOBranch branch = remoteSession.getBranchManager().getBranch(branchPath);
- InternalCDOTransaction transaction = (InternalCDOTransaction)remoteSession.openTransaction(branch);
+ InternalCDOBranch remoteBranch = remoteSession.getBranchManager().getBranch(branchPath);
+ InternalCDOTransaction remoteTransaction = (InternalCDOTransaction)remoteSession.openTransaction(remoteBranch);
try
{
@@ -780,7 +794,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
try
{
- ApplyChangeSetResult result = transaction.applyChangeSet(changes, base, this, head, true);
+ ApplyChangeSetResult result = remoteTransaction.applyChangeSet(changes, base, this, localSessionHead, true);
if (!result.getIDMappings().isEmpty())
{
throw new IllegalStateException("Attaching new objects is only supported for IDGenerationLocation.CLIENT");
@@ -791,10 +805,10 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
throw new CommitException(ex);
}
- transaction.setCommitComment(comment);
- CDOCommitInfo info = transaction.commit();
+ remoteTransaction.setCommitComment(comment);
+ CDOCommitInfo info = remoteTransaction.commit();
- ids = adjustLocalRevisions(transaction, info.getChangedObjects());
+ ids = checkinPostProcessing(remoteTransaction, info.getChangedObjects());
clearBase();
setTimeStamp(info.getTimeStamp());
@@ -808,7 +822,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
}
finally
{
- transaction.close();
+ remoteTransaction.close();
}
}
finally
@@ -822,74 +836,73 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
}
}
- protected Set<CDOID> adjustLocalRevisions(InternalCDOTransaction transaction, List<CDORevisionKey> changedObjects)
+ protected Set<CDOID> checkinPostProcessing(InternalCDOTransaction remoteTransaction,
+ List<CDORevisionKey> changedObjects)
{
Set<CDOID> ids = new HashSet<CDOID>();
IStoreAccessor.Raw accessor = null;
- for (CDORevisionKey key : changedObjects)
+ try
{
- CDOID id = key.getID();
- ids.add(id);
+ for (CDORevisionKey key : changedObjects)
+ {
+ CDOID id = key.getID();
+ ids.add(id);
- InternalCDORevision localRevision = (InternalCDORevision)getRevision(id);
- CDORevision baseRevision = base.getRevision(id);
- CDORevision remoteRevision = transaction.getObject(id).cdoRevision();
+ InternalCDORevision localSessionRevision = (InternalCDORevision)getRevision(id);
+ CDOBranch localSessionBranch = localSessionHead.getBranch();
- CDOBranch localBranch = head.getBranch();
- EClass eClass = localRevision.getEClass();
+ CDORevision baseRevision = base.getRevision(id);
+ CDORevision remoteRevision = remoteTransaction.getObject(id).cdoRevision();
- for (int v = baseRevision.getVersion(); v < localRevision.getVersion(); v++)
- {
- if (accessor == null)
+ EClass eClass = localSessionRevision.getEClass();
+
+ for (int v = baseRevision.getVersion(); v < localSessionRevision.getVersion(); v++)
{
- accessor = getLocalWriter(null);
- StoreThreadLocal.setAccessor(accessor);
- }
+ if (accessor == null)
+ {
+ accessor = getLocalWriter(null);
+ StoreThreadLocal.setAccessor(accessor);
+ }
- accessor.rawDelete(id, v, localBranch, eClass, new Monitor());
- }
+ accessor.rawDelete(id, v, localSessionBranch, eClass, new Monitor());
+ }
- if (localRevision.getVersion() != remoteRevision.getVersion())
- {
- if (accessor == null)
+ if (localSessionRevision.getVersion() != remoteRevision.getVersion())
{
- accessor = getLocalWriter(null);
- StoreThreadLocal.setAccessor(accessor);
- }
+ if (accessor == null)
+ {
+ accessor = getLocalWriter(null);
+ StoreThreadLocal.setAccessor(accessor);
+ }
+
+ accessor.rawDelete(id, localSessionRevision.getVersion(), localSessionBranch, eClass, new Monitor());
- accessor.rawDelete(id, localRevision.getVersion(), localBranch, eClass, new Monitor());
- localRevision.setVersion(remoteRevision.getVersion());
- adjustRevisionBranch(localRevision, localRepository.getBranchManager());
- accessor.rawStore(localRevision, new Monitor());
+ // Local session revisions are not cached and can directly be modified and stored in the local repository.
+ localSessionRevision.setBranchPoint(localRepositoryHead);
+ localSessionRevision.setVersion(remoteRevision.getVersion());
+
+ accessor.rawStore(localSessionRevision, new Monitor());
+ }
}
}
-
- if (accessor != null)
+ finally
{
- // TODO Should the accessor be released in finally{}?
finishRawAccess(accessor);
- localSession.getRevisionManager().getCache().clear();
}
return ids;
}
- private void adjustRevisionBranch(InternalCDORevision revision, InternalCDOBranchManager forBranchManager)
+ private void finishRawAccess(IStoreAccessor.Raw accessor)
{
- InternalCDOBranch branch = revision.getBranch();
- if (branch.getBranchManager() != forBranchManager)
+ if (accessor != null)
{
- branch = forBranchManager.getBranch(branch.getID());
- revision.setBranchPoint(branch.getPoint(revision.getTimeStamp()));
- }
- }
+ accessor.rawCommit(1, new Monitor());
+ StoreThreadLocal.release();
- private void finishRawAccess(IStoreAccessor.Raw accessor)
- {
- accessor.rawCommit(1, new Monitor());
- StoreThreadLocal.release();
- localRepository.getRevisionManager().getCache().clear();
+ localRepository.getRevisionManager().getCache().clear();
+ }
}
/**
@@ -951,7 +964,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
{
CDOID id = entry.getKey();
- InternalCDORevision revision = accessor.readRevision(id, head, CDORevision.UNCHUNKED, null);
+ InternalCDORevision revision = accessor.readRevision(id, localSessionHead, CDORevision.UNCHUNKED, null);
int version = revision.getVersion();
CDOBranch branch = revision.getBranch();
EClass eClass = revision.getEClass();
@@ -967,7 +980,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
for (CDOID id : adjustedObjects)
{
- InternalCDORevision revision = accessor.readRevision(id, head, CDORevision.UNCHUNKED, null);
+ InternalCDORevision revision = accessor.readRevision(id, localSessionHead, CDORevision.UNCHUNKED, null);
int version = revision.getVersion();
CDOBranch branch = revision.getBranch();
EClass eClass = revision.getEClass();
@@ -1008,9 +1021,11 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
{
LifecycleUtil.deactivate(localSession);
localSession = null;
+ localSessionHead = null;
LifecycleUtil.deactivate(localRepository);
localRepository = null;
+ localRepositoryHead = null;
LifecycleUtil.deactivate(container);
container = null;
@@ -1025,7 +1040,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
{
InternalCDOSession session = getLocalSession();
CDORevisionManager revisionManager = session.getRevisionManager();
- return revisionManager.getRevision(id, head, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true);
+ return revisionManager.getRevision(id, localSessionHead, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true);
}
public InternalRepository getLocalRepository()
@@ -1153,7 +1168,10 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
configuration.setConnector(connector);
configuration.setRepositoryName(repositoryName);
configuration.setIDGenerator(idGenerator);
- configuration.setRevisionManager(CDORevisionUtil.createRevisionManager(CDORevisionCache.NOOP)); // Use repo's cache
+
+ // Use no revision cache.
+ // This is important because session revisions are modified and copied into the repository.
+ configuration.setRevisionManager(CDORevisionUtil.createRevisionManager(CDORevisionCache.NOOP));
if (idGenerationLocation == IDGenerationLocation.STORE)
{
@@ -1164,7 +1182,7 @@ public class CDOWorkspaceImpl extends Notifier implements InternalCDOWorkspace
((ISignalProtocol<?>)session.getSessionProtocol()).setTimeout(ISignalProtocol.NO_TIMEOUT);
session.setPackageRegistry(localRepository.getPackageRegistry(false)); // Use repo's registry
- head = session.getBranchManager().getMainBranch().getHead();
+ localSessionHead = session.getBranchManager().getMainBranch().getHead();
return session;
}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/properties/Property.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/properties/Property.java
index dc2178a06d..538debaecd 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/properties/Property.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/properties/Property.java
@@ -11,7 +11,9 @@
*/
package org.eclipse.net4j.util.properties;
+import org.eclipse.net4j.internal.util.bundle.OM;
import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.lifecycle.LifecycleException;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
/**
@@ -140,18 +142,15 @@ public abstract class Property<RECEIVER>
return value.toString();
}
- catch (RuntimeException ex)
+ catch (LifecycleException ex)
{
- if (LifecycleUtil.isActive(receiver))
- {
- throw ex;
- }
+ //$FALL-THROUGH$
}
- catch (Error ex)
+ catch (Throwable ex)
{
if (LifecycleUtil.isActive(receiver))
{
- throw ex;
+ OM.LOG.error(ex);
}
}

Back to the top