diff options
author | Tobias Schwarz | 2013-07-30 07:02:20 +0000 |
---|---|---|
committer | Tobias Schwarz | 2013-07-30 07:02:20 +0000 |
commit | cd3cdbc0a85da2f57a2732cb63fb4e29f6ab4848 (patch) | |
tree | e218b386aeba23add09442d642243cd4c0b1302f /target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model | |
parent | b07499780c7f2cb8ae57e921dfd91cbac60eb93d (diff) | |
download | org.eclipse.tcf-cd3cdbc0a85da2f57a2732cb63fb4e29f6ab4848.tar.gz org.eclipse.tcf-cd3cdbc0a85da2f57a2732cb63fb4e29f6ab4848.tar.xz org.eclipse.tcf-cd3cdbc0a85da2f57a2732cb63fb4e29f6ab4848.zip |
Target Explorer: add common property access service
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model')
2 files changed, 141 insertions, 1 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model/META-INF/MANIFEST.MF b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model/META-INF/MANIFEST.MF index 0e3b8c298..355c82eb8 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model/META-INF/MANIFEST.MF +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model/META-INF/MANIFEST.MF @@ -8,7 +8,8 @@ Bundle-Vendor: %providerName Require-Bundle: org.eclipse.core.runtime;bundle-version="3.8.0", org.eclipse.tcf.core;bundle-version="1.1.0", org.eclipse.tcf.te.runtime;bundle-version="1.1.0", - org.eclipse.tcf.te.runtime.model;bundle-version="1.1.0" + org.eclipse.tcf.te.runtime.model;bundle-version="1.1.0", + org.eclipse.tcf.te.runtime.services;bundle-version="1.1.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Bundle-Localization: plugin diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model/src/org/eclipse/tcf/te/tcf/core/model/services/PropertiesAccessService.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model/src/org/eclipse/tcf/te/tcf/core/model/services/PropertiesAccessService.java new file mode 100644 index 000000000..0eb0ca06d --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.core.model/src/org/eclipse/tcf/te/tcf/core/model/services/PropertiesAccessService.java @@ -0,0 +1,139 @@ +/******************************************************************************* + * Copyright (c) 2013 Wind River Systems, Inc. and others. All rights reserved. + * This program and the accompanying materials are made available under the terms + * of the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.tcf.te.tcf.core.model.services; + +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.tcf.protocol.Protocol; +import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer; +import org.eclipse.tcf.te.runtime.model.interfaces.IContainerModelNode; +import org.eclipse.tcf.te.runtime.services.AbstractService; +import org.eclipse.tcf.te.runtime.services.interfaces.IPropertiesAccessService; + +/** + * Process context node properties access service implementation. + */ +public class PropertiesAccessService extends AbstractService implements IPropertiesAccessService { + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.runtime.services.interfaces.IPropertiesAccessService#getTargetAddress(java.lang.Object) + */ + @Override + public Map<String, String> getTargetAddress(Object context) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.runtime.services.interfaces.IPropertiesAccessService#getProperty(java.lang.Object, java.lang.String) + */ + @Override + public Object getProperty(final Object context, final String key) { + Assert.isNotNull(context); + Assert.isNotNull(key); + + final AtomicReference<Object> value = new AtomicReference<Object>(); + if (context instanceof IPropertiesContainer) { + final IPropertiesContainer node = (IPropertiesContainer) context; + + Runnable runnable = new Runnable() { + @Override + public void run() { + Object val = node.getProperty(key); + value.set(val); + } + }; + + if (Protocol.isDispatchThread()) runnable.run(); + else Protocol.invokeAndWait(runnable); + } + + return value.get(); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.runtime.services.interfaces.IPropertiesAccessService#setProperty(java.lang.Object, java.lang.String, java.lang.Object) + */ + @Override + public boolean setProperty(final Object context, final String key, final Object value) { + Assert.isNotNull(context); + Assert.isNotNull(key); + + final AtomicBoolean result = new AtomicBoolean(); + if (context instanceof IPropertiesContainer) { + final IPropertiesContainer node = (IPropertiesContainer) context; + + Runnable runnable = new Runnable() { + @Override + public void run() { + result.set(node.setProperty(key, value)); + } + }; + + if (Protocol.isDispatchThread()) runnable.run(); + else Protocol.invokeAndWait(runnable); + } + + return result.get(); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.runtime.services.interfaces.IPropertiesAccessService#isProperty(java.lang.Object, java.lang.String, java.lang.Object) + */ + @Override + public boolean isProperty(final Object context, final String key, final Object value) { + Assert.isNotNull(context); + Assert.isNotNull(key); + + final AtomicBoolean result = new AtomicBoolean(); + if (context instanceof IPropertiesContainer) { + final IPropertiesContainer node = (IPropertiesContainer) context; + + Runnable runnable = new Runnable() { + @Override + public void run() { + result.set(node.isProperty(key, value)); + } + }; + + if (Protocol.isDispatchThread()) runnable.run(); + else Protocol.invokeAndWait(runnable); + } + + return result.get(); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.runtime.services.interfaces.IPropertiesAccessService#getParent(java.lang.Object) + */ + @Override + public Object getParent(final Object context) { + Assert.isNotNull(context); + + final AtomicReference<Object> value = new AtomicReference<Object>(); + if (context instanceof IContainerModelNode) { + final IContainerModelNode node = (IContainerModelNode) context; + + Runnable runnable = new Runnable() { + @Override + public void run() { + value.set(node.getParent()); + } + }; + + if (Protocol.isDispatchThread()) runnable.run(); + else Protocol.invokeAndWait(runnable); + } + + return value.get(); + } +} |