You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ma...@apache.org on 2013/04/03 14:50:06 UTC
svn commit: r1463977 - in /ace/trunk: org.apache.ace.identification.api/
org.apache.ace.identification.ifconfig/
org.apache.ace.identification.property/ org.apache.ace.identification/
org.apache.ace.identification/.settings/ org.apache.ace.identificati...
Author: marrs
Date: Wed Apr 3 12:50:05 2013
New Revision: 1463977
URL: http://svn.apache.org/r1463977
Log:
ACE-333 Merged the o.a.a.identification projects into one.
Added:
ace/trunk/org.apache.ace.identification/
ace/trunk/org.apache.ace.identification/.classpath
ace/trunk/org.apache.ace.identification/.project
ace/trunk/org.apache.ace.identification/.settings/
ace/trunk/org.apache.ace.identification/.settings/org.eclipse.jdt.core.prefs
ace/trunk/org.apache.ace.identification/api.bnd
ace/trunk/org.apache.ace.identification/bnd.bnd
ace/trunk/org.apache.ace.identification/build.xml
ace/trunk/org.apache.ace.identification/ifconfig.bnd
ace/trunk/org.apache.ace.identification/property.bnd
ace/trunk/org.apache.ace.identification/src/
ace/trunk/org.apache.ace.identification/src/org/
ace/trunk/org.apache.ace.identification/src/org/apache/
ace/trunk/org.apache.ace.identification/src/org/apache/ace/
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/Identification.java
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/Activator.java
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/IfconfigIdentification.java
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/packageinfo
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/Activator.java
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/PropertyBasedIdentification.java
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/constants/
ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/constants/IdentificationConstants.java
ace/trunk/org.apache.ace.identification/test/
ace/trunk/org.apache.ace.identification/test/org/
ace/trunk/org.apache.ace.identification/test/org/apache/
ace/trunk/org.apache.ace.identification/test/org/apache/ace/
ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/
ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/ifconfig/
ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/ifconfig/IfconfigIdentificationTest.java
ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/
ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/PropertyBasedIdentificationTest.java
ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/SimpleIdentificationTest.java
Removed:
ace/trunk/org.apache.ace.identification.api/
ace/trunk/org.apache.ace.identification.ifconfig/
ace/trunk/org.apache.ace.identification.property/
Added: ace/trunk/org.apache.ace.identification/.classpath
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/.classpath?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/.classpath (added)
+++ ace/trunk/org.apache.ace.identification/.classpath Wed Apr 3 12:50:05 2013
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" output="bin_test" path="test"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="aQute.bnd.classpath.container"/>
+ <classpathentry kind="con" path="org.testng.TESTNG_CONTAINER"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: ace/trunk/org.apache.ace.identification/.project
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/.project?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/.project (added)
+++ ace/trunk/org.apache.ace.identification/.project Wed Apr 3 12:50:05 2013
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.apache.ace.identification</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>bndtools.core.bndbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>bndtools.core.bndnature</nature>
+ </natures>
+</projectDescription>
Added: ace/trunk/org.apache.ace.identification/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/.settings/org.eclipse.jdt.core.prefs?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/.settings/org.eclipse.jdt.core.prefs (added)
+++ ace/trunk/org.apache.ace.identification/.settings/org.eclipse.jdt.core.prefs Wed Apr 3 12:50:05 2013
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
Added: ace/trunk/org.apache.ace.identification/api.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/api.bnd?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/api.bnd (added)
+++ ace/trunk/org.apache.ace.identification/api.bnd Wed Apr 3 12:50:05 2013
@@ -0,0 +1,2 @@
+Export-Package: org.apache.ace.identification
+Bundle-Version: 1.0.0
Added: ace/trunk/org.apache.ace.identification/bnd.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/bnd.bnd?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/bnd.bnd (added)
+++ ace/trunk/org.apache.ace.identification/bnd.bnd Wed Apr 3 12:50:05 2013
@@ -0,0 +1,9 @@
+-buildpath: \
+ osgi.core,\
+ osgi.cmpn,\
+ org.apache.felix.dependencymanager,\
+ org.mockito.mockito-all,\
+ org.apache.ace.identification.api;version=latest,\
+ org.apache.ace.test;version=latest
+
+-sub: *.bnd
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/build.xml
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/build.xml?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/build.xml (added)
+++ ace/trunk/org.apache.ace.identification/build.xml Wed Apr 3 12:50:05 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="project" default="build">
+
+ <!-- -->
+
+ <import file="../cnf/build.xml" />
+</project>
Added: ace/trunk/org.apache.ace.identification/ifconfig.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/ifconfig.bnd?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/ifconfig.bnd (added)
+++ ace/trunk/org.apache.ace.identification/ifconfig.bnd Wed Apr 3 12:50:05 2013
@@ -0,0 +1,3 @@
+Private-Package: org.apache.ace.identification.ifconfig
+Bundle-Activator: org.apache.ace.identification.ifconfig.Activator
+Bundle-Version: 1.0.0
Added: ace/trunk/org.apache.ace.identification/property.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/property.bnd?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/property.bnd (added)
+++ ace/trunk/org.apache.ace.identification/property.bnd Wed Apr 3 12:50:05 2013
@@ -0,0 +1,4 @@
+Private-Package: org.apache.ace.identification.property,\
+ org.apache.ace.identification.property.constants
+Bundle-Activator: org.apache.ace.identification.property.Activator
+Bundle-Version: 1.0.0
Added: ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/Identification.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/Identification.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/Identification.java (added)
+++ ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/Identification.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification;
+
+/**
+ * The Identification service can be used to identify the system it is running on. This
+ * identification must be unique and must not change.
+ */
+public interface Identification
+{
+
+ /**
+ * Returns the identification of the system.
+ *
+ * @return the identification, or <code>null</code> if the identification could not be obtained
+ */
+ public String getID();
+
+}
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/Activator.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/Activator.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/Activator.java (added)
+++ ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/Activator.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.ifconfig;
+
+import org.apache.ace.identification.Identification;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {
+
+ public synchronized void init(BundleContext context, DependencyManager manager) throws Exception {
+ manager.add(createComponent()
+ .setInterface(new String[] {Identification.class.getName()}, null)
+ .setImplementation(IfconfigIdentification.class)
+ .add(createServiceDependency().setService(LogService.class).setRequired(false))
+ );
+ }
+
+ public void destroy(BundleContext context, DependencyManager manager) throws Exception {
+ // do nothing
+ }
+}
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/IfconfigIdentification.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/IfconfigIdentification.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/IfconfigIdentification.java (added)
+++ ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/ifconfig/IfconfigIdentification.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.ifconfig;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import org.apache.ace.identification.Identification;
+import org.osgi.service.log.LogService;
+
+/**
+ * Implementation of the <code>Identification</code> interface which will determine a mac-address based ID which is determined
+ * by running the ifconfig command. The first adapter that has been assigned an ip address is used.
+ *
+ * The identification has been tested on <code>ifconfig 1.42 (2001-04-13)</code> which comes with Debian Linux. Similar
+ * versions of ifconfig are likely to work.
+ */
+public class IfconfigIdentification implements Identification {
+
+ private static final String IFCONFIG_COMMAND = "ifconfig";
+ private static final String MAC_IDENTIFIER = "HWaddr ";
+ private static final String IP_IDENTIFIER = "inet addr";
+
+ private volatile LogService m_log; // injected by dependency manager
+
+ private String m_targetID = null;
+
+ public synchronized String getID() {
+ if (m_targetID == null) {
+ BufferedReader reader = null;
+ try {
+ Process process = Runtime.getRuntime().exec(IFCONFIG_COMMAND);
+ InputStream inputStream = process.getInputStream();
+ reader = new BufferedReader(new InputStreamReader(inputStream));
+ m_targetID = parseIfconfigOutput(reader).toLowerCase();
+ }
+ catch (IOException ioe) {
+ m_log.log(LogService.LOG_WARNING, "Unable to determine ifconfig based mac-address target identification.", ioe);
+ return null;
+ }
+ finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ }
+ catch (IOException e) {
+ // not much we can do
+ }
+ }
+ }
+ }
+ return m_targetID;
+ }
+
+ /**
+ * Parses the mac address of the first active adapter from the output of the ifconfig command.
+ *
+ * @param ifconfigOutput Reader pointing to the output of the ifconfig command.
+ * @return String containing the mac address or <code>null</code> if no valid mac address could be determined.
+ * @throws java.io.IOException If the specified reader could not be read correctly.
+ */
+ protected String parseIfconfigOutput(BufferedReader ifconfigOutput) throws IOException {
+ // Sample output (the part that matters):
+ // eth0 Link encap:Ethernet HWaddr 00:00:21:CF:76:47
+ // inet addr:192.168.1.65 Bcast:192.168.1.255 Mask:255.255.255.0
+ String previousLine = "";
+ String line;
+ while ((line = ifconfigOutput.readLine()) != null) {
+ if (line.indexOf(IP_IDENTIFIER) != -1) {
+ if (previousLine.indexOf(MAC_IDENTIFIER) != -1) {
+ String macAddress = previousLine.substring(previousLine.lastIndexOf(MAC_IDENTIFIER) + MAC_IDENTIFIER.length(), previousLine.length());
+ macAddress = macAddress.trim();
+ if (isValidMac(macAddress)) {
+ return macAddress;
+ }
+ else {
+ return null;
+ }
+ }
+ }
+ previousLine = line;
+ }
+ return null;
+ }
+
+ /**
+ * Verifies whether a string contains a valid mac addres, a valid mac address consists of
+ * 6 pairs of [A-F,a-f,0-9] separated by ':', e.g. <code>0A:F6:33:19:DE:2A</code>.
+ *
+ * @param mac String containing the possible mac address
+ * @return true If the specified string contains a valid mac address, false otherwise.
+ */
+ protected boolean isValidMac(String mac) {
+ if (mac.length() != 17) {
+ return false;
+ }
+ char[] chars = mac.toCharArray();
+ for (int i = 0; i < chars.length; i++) {
+ char c = chars[i];
+ if (i % 3 == 2) {
+ if (':' != c) {
+ return false;
+ }
+ }
+ else if (!(('0' <= c) && (c <= '9')) &&
+ !(('a' <= c) && (c <= 'f')) &&
+ !(('A' <= c) && (c <= 'F'))) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/packageinfo
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/packageinfo?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/packageinfo (added)
+++ ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/packageinfo Wed Apr 3 12:50:05 2013
@@ -0,0 +1 @@
+version 1.0
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/Activator.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/Activator.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/Activator.java (added)
+++ ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/Activator.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.property;
+
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.ace.identification.Identification;
+import org.apache.ace.identification.property.constants.IdentificationConstants;
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase implements ManagedServiceFactory {
+ private static final String MA_NAME = "ma";
+ private DependencyManager m_manager;
+ private BundleContext m_context;
+ private final Map /*<String, Component>*/ m_instances = new HashMap();
+ private volatile LogService m_log;
+
+ public synchronized void init(BundleContext context, DependencyManager manager) throws Exception {
+ m_manager = manager;
+ m_context = context;
+ manager.add(createComponent()
+ .setInterface(new String[] {Identification.class.getName()}, null)
+ .setImplementation(PropertyBasedIdentification.class)
+ .add(createConfigurationDependency()
+ .setPid(IdentificationConstants.IDENTIFICATION_PID))
+ .add(createServiceDependency()
+ .setService(LogService.class)
+ .setRequired(false))
+ );
+ manager.add(createComponent()
+ .setInterface(ManagedServiceFactory.class.getName(), new Properties() {{ put(Constants.SERVICE_PID, IdentificationConstants.IDENTIFICATION_FACTORY_PID); }})
+ .setImplementation(this)
+ .add(createServiceDependency()
+ .setService(LogService.class)
+ .setRequired(false))
+ );
+ }
+
+ public void destroy(BundleContext context, DependencyManager manager) throws Exception {
+ // do nothing
+ }
+
+ public String getName() {
+ return "Identification Service Factory";
+ }
+
+ public void updated(String pid, Dictionary dict) throws ConfigurationException {
+ String ma = (String) dict.get(MA_NAME);
+ String id = (String) dict.get(IdentificationConstants.IDENTIFICATION_TARGETID_KEY);
+
+ boolean needToAddComponent = false;
+ Component component;
+ synchronized (m_instances) {
+ component = (Component) m_instances.get(pid);
+ if (component == null) {
+ Properties props = new Properties();
+ if ((ma != null) && (ma.length() > 0)) {
+ props.put(MA_NAME, ma);
+ }
+ props.put(IdentificationConstants.IDENTIFICATION_TARGETID_KEY, id);
+ component = m_manager.createComponent()
+ .setInterface(Identification.class.getName(), props)
+ .setImplementation(new PropertyBasedIdentification(id))
+ .add(createServiceDependency()
+ .setService(LogService.class)
+ .setRequired(false)
+ );
+ m_instances.put(pid, component);
+ needToAddComponent = true;
+ }
+ }
+ if (needToAddComponent) {
+ m_manager.add(component);
+ }
+ else {
+ Object service = component.getService();
+ if (service instanceof PropertyBasedIdentification) {
+ PropertyBasedIdentification identification = (PropertyBasedIdentification) service;
+ identification.setID(id);
+ }
+ }
+ }
+
+ public void deleted(String pid) {
+ Component log;
+ synchronized (m_instances) {
+ log = (Component) m_instances.remove(pid);
+ }
+ if (log != null) {
+ m_manager.remove(log);
+ }
+ }
+}
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/PropertyBasedIdentification.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/PropertyBasedIdentification.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/PropertyBasedIdentification.java (added)
+++ ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/PropertyBasedIdentification.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.property;
+
+import java.util.Dictionary;
+
+import org.apache.ace.identification.Identification;
+import org.apache.ace.identification.property.constants.IdentificationConstants;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
+import org.osgi.service.log.LogService;
+
+/**
+ * Simple implementation of the <code>Identification</code> interface. Because
+ * a target identification should not change during it's lifetime the user of this
+ * implementation should set the ID only once.
+ */
+public class PropertyBasedIdentification implements ManagedService, Identification {
+ private final Object LOCK = new Object();
+ private volatile LogService m_log;
+ private String m_targetID;
+
+ public PropertyBasedIdentification() {
+ }
+
+ public PropertyBasedIdentification(String id) {
+ setID(id);
+ }
+
+ public String getID() {
+ synchronized (LOCK) {
+ return m_targetID;
+ }
+ }
+
+ public void setID(String id) {
+ synchronized (LOCK) {
+ if (m_targetID != null) {
+ m_log.log(LogService.LOG_WARNING, "Target ID is being changed from " + m_targetID + " to " + id);
+ }
+ m_targetID = id;
+ }
+ }
+
+ public void updated(Dictionary dictionary) throws ConfigurationException {
+ if (dictionary != null) {
+ String id = (String) dictionary.get(IdentificationConstants.IDENTIFICATION_TARGETID_KEY);
+ if ((id == null) || (id.length() == 0)) {
+ // illegal config
+ throw new ConfigurationException(IdentificationConstants.IDENTIFICATION_TARGETID_KEY, "Illegal target ID supplied");
+ }
+ // legal config, set configuration
+ setID(id);
+ }
+ }
+}
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/constants/IdentificationConstants.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/constants/IdentificationConstants.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/constants/IdentificationConstants.java (added)
+++ ace/trunk/org.apache.ace.identification/src/org/apache/ace/identification/property/constants/IdentificationConstants.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.property.constants;
+
+public interface IdentificationConstants {
+ public static final String IDENTIFICATION_PID = "org.apache.ace.identification.property";
+ public static final String IDENTIFICATION_FACTORY_PID = "org.apache.ace.identification.property.factory";
+ public static final String IDENTIFICATION_TARGETID_KEY = "targetID";
+}
\ No newline at end of file
Added: ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/ifconfig/IfconfigIdentificationTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/ifconfig/IfconfigIdentificationTest.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/ifconfig/IfconfigIdentificationTest.java (added)
+++ ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/ifconfig/IfconfigIdentificationTest.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.ifconfig;
+
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+
+import org.apache.ace.test.utils.TestUtils;
+import org.osgi.service.log.LogService;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+public class IfconfigIdentificationTest {
+
+ private IfconfigIdentification m_identification;
+
+ @BeforeTest(alwaysRun = true)
+ protected void setUp() throws Exception {
+ m_identification = new IfconfigIdentification();
+ TestUtils.configureObject(m_identification, LogService.class);
+ }
+
+ @Test(groups = { UNIT })
+ public void testMacAddressVerifying() throws Exception {
+ assert m_identification.isValidMac("FF:FF:FF:FF:FF:FF");
+ assert m_identification.isValidMac("01:23:45:67:89:01");
+ assert m_identification.isValidMac("0D:C3:45:6A:B9:01");
+ assert !m_identification.isValidMac("");
+ assert !m_identification.isValidMac("FF:FF:FF:FF:FF");
+ assert !m_identification.isValidMac("FF:FF:FF:FF:FF:");
+ assert !m_identification.isValidMac("FF:FF:FF:FF:FF:F");
+ assert !m_identification.isValidMac("A:B:C:D:E:F");
+ assert !m_identification.isValidMac("FF:FF:FF:FF:FF:FG");
+ assert !m_identification.isValidMac("FF:FF:FF:FF:FF:FF:");
+ assert !m_identification.isValidMac("FF-FF-FF-FF-FF-FF");
+ assert !m_identification.isValidMac("thisisnotamacaddr");
+ }
+}
Added: ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/PropertyBasedIdentificationTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/PropertyBasedIdentificationTest.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/PropertyBasedIdentificationTest.java (added)
+++ ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/PropertyBasedIdentificationTest.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.property;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNull.nullValue;
+import static org.mockito.Mockito.mock;
+
+import java.lang.reflect.Field;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.ace.identification.property.constants.IdentificationConstants;
+import org.mockito.Mockito;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.log.LogService;
+import org.testng.annotations.Test;
+
+public class PropertyBasedIdentificationTest {
+ @Test(groups = { UNIT })
+ public void getIdWithoutUpdate() {
+ PropertyBasedIdentification basedIdentification = new PropertyBasedIdentification();
+ Assert.assertNull(basedIdentification.getID());
+ }
+
+ @Test(groups = { UNIT })
+ public void getIdWithUpdate() throws ConfigurationException {
+ PropertyBasedIdentification basedIdentification = new PropertyBasedIdentification();
+ Dictionary dict = new Hashtable();
+ dict.put( IdentificationConstants.IDENTIFICATION_TARGETID_KEY, "myTargetId" );
+ basedIdentification.updated( dict );
+ Assert.assertEquals(basedIdentification.getID(), "myTargetId");
+ }
+
+ @Test(groups = { UNIT })
+ public void getIdOverwrite() throws ConfigurationException {
+ PropertyBasedIdentification basedIdentification = new PropertyBasedIdentification();
+ injectServices( basedIdentification );
+
+ Dictionary dict = new Hashtable();
+ dict.put( IdentificationConstants.IDENTIFICATION_TARGETID_KEY, "oldId" );
+ Dictionary dict2 = new Hashtable();
+ dict2.put( IdentificationConstants.IDENTIFICATION_TARGETID_KEY, "newId" );
+
+ basedIdentification.updated( dict );
+ basedIdentification.updated( dict2 );
+
+ Assert.assertEquals(basedIdentification.getID(), "newId");
+ }
+
+ private void injectServices(Object o) {
+ for (Field field : o.getClass().getDeclaredFields()) {
+ if (field.getType() == LogService.class) {
+ field.setAccessible(true);
+ try {
+ field.set(o, getLogService());
+ }
+ catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ private LogService getLogService() {
+ return mock(LogService.class);
+ }
+}
Added: ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/SimpleIdentificationTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/SimpleIdentificationTest.java?rev=1463977&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/SimpleIdentificationTest.java (added)
+++ ace/trunk/org.apache.ace.identification/test/org/apache/ace/identification/property/SimpleIdentificationTest.java Wed Apr 3 12:50:05 2013
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.identification.property;
+
+import static org.apache.ace.test.utils.TestUtils.UNIT;
+
+import java.util.Properties;
+
+import org.apache.ace.identification.property.constants.IdentificationConstants;
+import org.apache.ace.test.utils.TestUtils;
+import org.osgi.service.log.LogService;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+public class SimpleIdentificationTest {
+ private PropertyBasedIdentification m_identification;
+
+ private static final String TEST_ID = "testTargetID";
+
+ @BeforeTest(alwaysRun = true)
+ protected void setUp() throws Exception {
+ m_identification = new PropertyBasedIdentification();
+ TestUtils.configureObject(m_identification, LogService.class);
+ }
+
+ /**
+ * Test simple identification
+ *
+ * @throws Exception
+ */
+ @SuppressWarnings("serial")
+ @Test(groups = { UNIT })
+ public void testSimpleIdentification() throws Exception {
+ m_identification.updated(
+ new Properties() {
+ {put(IdentificationConstants.IDENTIFICATION_TARGETID_KEY, TEST_ID);}
+ });
+ assert TEST_ID.equals(m_identification.getID()) : "target ID does not match configured target ID";
+ }
+}