Fix EOL style
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@615140 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Capability.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Capability.java
index e8d4bee..ead50ab 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Capability.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Capability.java
@@ -1,123 +1,123 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-
-/**
- * This class describe and store capability node.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class Capability
-{
-
- /**
- * m_name: name of the capability.
- */
- private String m_name;
-
- /**
- * m_p: List of PElement.
- */
- private List m_p = new ArrayList();
-
-
- /**
- * get the name attribute.
- *
- * @return name attribute
- */
- public String getName()
- {
- return m_name;
- }
-
-
- /**
- * set the name attribute.
- *
- * @param name new name value
- *
- */
- public void setName( String name )
- {
- this.m_name = name;
- }
-
-
- /**
- * return the capabilities.
- *
- * @return List of PElement
- */
- public List getP()
- {
- return m_p;
- }
-
-
- /**
- * set the capabilities.
- *
- * @param mp List of PElement
- *
- */
- public void setP( List mp )
- {
- this.m_p = mp;
- }
-
-
- /**
- * add one element in List.
- *
- * @param pelement PElement
- *
- */
- public void addP( PElement pelement )
- {
- m_p.add( pelement );
- }
-
-
- /**
- * transform this object to Node.
- *
- * @param father father document for create Node
- * @return node
- */
- public Node getNode( Document father )
- {
- Element capability = father.createElement( "capability" );
- capability.setAttribute( "name", this.getName() );
- for ( int i = 0; i < this.getP().size(); i++ )
- {
- capability.appendChild( ( ( PElement ) ( this.getP().get( i ) ) ).getNode( father ) );
- }
- return capability;
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * This class describe and store capability node.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class Capability
+{
+
+ /**
+ * m_name: name of the capability.
+ */
+ private String m_name;
+
+ /**
+ * m_p: List of PElement.
+ */
+ private List m_p = new ArrayList();
+
+
+ /**
+ * get the name attribute.
+ *
+ * @return name attribute
+ */
+ public String getName()
+ {
+ return m_name;
+ }
+
+
+ /**
+ * set the name attribute.
+ *
+ * @param name new name value
+ *
+ */
+ public void setName( String name )
+ {
+ this.m_name = name;
+ }
+
+
+ /**
+ * return the capabilities.
+ *
+ * @return List of PElement
+ */
+ public List getP()
+ {
+ return m_p;
+ }
+
+
+ /**
+ * set the capabilities.
+ *
+ * @param mp List of PElement
+ *
+ */
+ public void setP( List mp )
+ {
+ this.m_p = mp;
+ }
+
+
+ /**
+ * add one element in List.
+ *
+ * @param pelement PElement
+ *
+ */
+ public void addP( PElement pelement )
+ {
+ m_p.add( pelement );
+ }
+
+
+ /**
+ * transform this object to Node.
+ *
+ * @param father father document for create Node
+ * @return node
+ */
+ public Node getNode( Document father )
+ {
+ Element capability = father.createElement( "capability" );
+ capability.setAttribute( "name", this.getName() );
+ for ( int i = 0; i < this.getP().size(); i++ )
+ {
+ capability.appendChild( ( ( PElement ) ( this.getP().get( i ) ) ).getNode( father ) );
+ }
+ return capability;
+ }
+
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Category.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Category.java
index 990256b..c50e4b9 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Category.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Category.java
@@ -1,73 +1,73 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-
-/**
- * describe and store category node.
- *
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-
-public class Category
-{
- /**
- * id of the category.
- */
- private String m_id;
-
-
- /**
- * get the id attribute.
- *
- * @return id
- */
- public String getId()
- {
- return m_id;
- }
-
-
- /**
- * set the id attribute.
- * @param id new id value
- */
- public void setId( String id )
- {
- this.m_id = id;
- }
-
-
- /**
- * transform this object to node.
- * @param father father document for create Node
- * @return node
- */
- public Node getNode( Document father )
- {
- Element category = father.createElement( "category" );
- category.setAttribute( "id", this.getId() );
- return category;
- }
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * describe and store category node.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+
+public class Category
+{
+ /**
+ * id of the category.
+ */
+ private String m_id;
+
+
+ /**
+ * get the id attribute.
+ *
+ * @return id
+ */
+ public String getId()
+ {
+ return m_id;
+ }
+
+
+ /**
+ * set the id attribute.
+ * @param id new id value
+ */
+ public void setId( String id )
+ {
+ this.m_id = id;
+ }
+
+
+ /**
+ * transform this object to node.
+ * @param father father document for create Node
+ * @return node
+ */
+ public Node getNode( Document father )
+ {
+ Element category = father.createElement( "category" );
+ category.setAttribute( "id", this.getId() );
+ return category;
+ }
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Config.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Config.java
index 16cbe92..54952be 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Config.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Config.java
@@ -1,91 +1,91 @@
-/*
- * 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.felix.obr.plugin;
-
-
-/**
- * this class is used to store some user information about configuration of the plugin.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- *
- */
-public class Config
-{
-
- /**
- * use relative path or not.
- */
- private boolean m_pathRelative; // use relative or absolute path in repository.xml
-
- /**
- * deploy file or not.
- */
- private boolean m_fileRemote; // deploy file on remote server
-
-
- /**
- * constructor: set default configuration: use relative path and don't upload file.
- *
- */
- public Config()
- {
- // default configuration
- m_pathRelative = true;
- m_fileRemote = false;
- }
-
-
- /**
- * set relativePath attribute.
- * @param value new value of attribute
- */
- public void setPathRelative( boolean value )
- {
- m_pathRelative = value;
- }
-
-
- /**
- * set fileRemote attribute.
- * @param value new value of attribute
- */
- public void setRemotely( boolean value )
- {
- m_fileRemote = value;
- }
-
-
- /**
- * get use path relative.
- * @return true if plugin use relative path, else false
- */
- public boolean isPathRelative()
- {
- return m_pathRelative;
- }
-
-
- /**
- * get if use upload file.
- * @return true if the file will be uploaded, else false
- */
- public boolean isRemotely()
- {
- return m_fileRemote;
- }
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+/**
+ * this class is used to store some user information about configuration of the plugin.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ *
+ */
+public class Config
+{
+
+ /**
+ * use relative path or not.
+ */
+ private boolean m_pathRelative; // use relative or absolute path in repository.xml
+
+ /**
+ * deploy file or not.
+ */
+ private boolean m_fileRemote; // deploy file on remote server
+
+
+ /**
+ * constructor: set default configuration: use relative path and don't upload file.
+ *
+ */
+ public Config()
+ {
+ // default configuration
+ m_pathRelative = true;
+ m_fileRemote = false;
+ }
+
+
+ /**
+ * set relativePath attribute.
+ * @param value new value of attribute
+ */
+ public void setPathRelative( boolean value )
+ {
+ m_pathRelative = value;
+ }
+
+
+ /**
+ * set fileRemote attribute.
+ * @param value new value of attribute
+ */
+ public void setRemotely( boolean value )
+ {
+ m_fileRemote = value;
+ }
+
+
+ /**
+ * get use path relative.
+ * @return true if plugin use relative path, else false
+ */
+ public boolean isPathRelative()
+ {
+ return m_pathRelative;
+ }
+
+
+ /**
+ * get if use upload file.
+ * @return true if the file will be uploaded, else false
+ */
+ public boolean isRemotely()
+ {
+ return m_fileRemote;
+ }
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ExtractBindexInfo.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ExtractBindexInfo.java
index b416e32..679dcc0 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ExtractBindexInfo.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ExtractBindexInfo.java
@@ -1,322 +1,322 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.osgi.impl.bundle.obr.resource.BundleInfo;
-import org.osgi.impl.bundle.obr.resource.CapabilityImpl;
-import org.osgi.impl.bundle.obr.resource.RepositoryImpl;
-import org.osgi.impl.bundle.obr.resource.RequirementImpl;
-import org.osgi.impl.bundle.obr.resource.ResourceImpl;
-import org.osgi.impl.bundle.obr.resource.VersionRange;
-
-
-/**
- * this class is used to configure bindex and get information built by bindex about targeted bundle.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ExtractBindexInfo
-{
-
- /**
- * attribute get from bindex which describe targeted resource.
- */
- private ResourceImpl m_resource;
-
-
- /**
- * configure bindex and build information.
- * @param repoFilename URI on OBR descriptor file
- * @param outFile path on targeted jar-file
- * @throws MojoExecutionException occurs if bindex configuration failed
- */
- public ExtractBindexInfo( URI repoFilename, String outFile ) throws MojoExecutionException
- {
-
- this.m_resource = null;
- RepositoryImpl repository = null;
- try
- {
- repository = new RepositoryImpl( new File( repoFilename ).getAbsoluteFile().toURL() );
- }
- catch ( MalformedURLException e )
- {
- e.printStackTrace();
- throw new MojoExecutionException( "MalformedURLException" );
- }
- BundleInfo info = null;
- try
- {
- info = new BundleInfo( repository, new File( outFile ) );
- }
- catch ( Exception e )
- {
- e.printStackTrace();
- throw new MojoExecutionException( "Exception" );
- }
-
- try
- {
- m_resource = info.build();
- }
- catch ( Exception e )
- {
- e.printStackTrace();
- throw new MojoExecutionException( "Exception" );
- }
- }
-
-
- /**
- * transform logical operator in xml syntax.
- * @param filter string which contains logical operator
- * @return string in correct xml syntax
- */
- private String parseFilter( String filter )
- {
- filter.replaceAll( "&", "&" );
- filter.replaceAll( ">=", ">" );
-
- return filter;
- }
-
-
- /**
- * extract capabilities from bindex information.
- * @return bundle capabilities List
- */
- public List getCapabilities()
- {
- List list = new ArrayList();
- Collection res = m_resource.getCapabilityList();
- Iterator it = res.iterator();
- while ( it.hasNext() )
- {
- Capability capability = new Capability();
- CapabilityImpl ci = ( CapabilityImpl ) it.next();
- capability.setName( ci.getName() );
- // System.out.println(ci.getName()) ;
- if ( !( ci.getName().compareTo( "bundle" ) == 0 ) )
- {
- Map properties = ci.getProperties();
- for ( Iterator k = properties.keySet().iterator(); k.hasNext(); )
- {
- PElement p = new PElement();
- String key = ( String ) k.next();
- List values = ( List ) properties.get( key );
- for ( Iterator v = values.iterator(); v.hasNext(); )
- {
- Object value = v.next();
- p.setN( key );
- if ( value != null )
- {
- p.setV( value.toString() );
- }
- else
- {
- System.out.println( "Missing value " + key );
- }
- String type = null;
- if ( value instanceof Number )
- {
- type = "number";
- }
- else
- {
- if ( value.getClass() == VersionRange.class )
- {
- type = "version";
- }
- }
- if ( type != null )
- {
- p.setT( type );
- }
- }
- capability.addP( p );
- }
-
- list.add( capability );
- }
- }
- return list;
- }
-
-
- /**
- * extract requirement from bindex information.
- * @return bundle requirement List
- */
- public List getRequirement()
- {
- List list = new ArrayList();
- Collection res = m_resource.getRequirementList();
- Iterator it = res.iterator();
- while ( it.hasNext() )
- {
- RequirementImpl ci = ( RequirementImpl ) it.next();
- Require require = new Require();
-
- require.setExtend( String.valueOf( ci.isExtend() ) );
- require.setMultiple( String.valueOf( ci.isMultiple() ) );
- require.setOptional( String.valueOf( ci.isOptional() ) );
- require.setName( ci.getName() );
- require.setFilter( this.parseFilter( ci.getFilter() ) );
- require.setValue( ci.getComment() );
- list.add( require );
- }
- return list;
- }
-
-
- /**
- * extract symbolic name from bindex information.
- * @return bundle symbolic name
- */
- public String getSymbolicName()
- {
- return m_resource.getSymbolicName();
- }
-
-
- /**
- * extract version from bindex information.
- * @return bundle version
- */
- public String getVersion()
- {
- if ( m_resource.getVersion() != null )
- {
- return m_resource.getVersion().toString();
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * extract presentation name from bindex information.
- * @return bundle presentation name
- */
- public String getPresentationName()
- {
- return m_resource.getPresentationName();
- }
-
-
- /**
- * extract copyright from bindex information.
- * @return bundle copyright
- */
- public String getCopyright()
- {
- return m_resource.getCopyright();
- }
-
-
- /**
- * extract description from bindex information.
- * @return bundle description
- */
- public String getDescription()
- {
- return m_resource.getDescription();
- }
-
-
- /**
- * extract documentation from bindex information.
- * @return bundle documentation
- */
- public String getDocumentation()
- {
- if ( m_resource.getDocumentation() != null )
- {
- return m_resource.getDocumentation().toString();
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * extract license from bindex information.
- * @return bundle license
- */
- public String getLicense()
- {
- if ( m_resource.getLicense() != null )
- {
- return m_resource.getLicense().toString();
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * extract source from bindex information.
- * @return bundle source
- */
- public String getSource()
- {
- if ( m_resource.getSource() != null )
- {
- return m_resource.getSource().toString();
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * extract source from bindex information.
- * @return bundle source
- */
- public String getId()
- {
- if ( m_resource.getId() != null )
- {
- return m_resource.getId();
- }
- else
- {
- return null;
- }
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.osgi.impl.bundle.obr.resource.BundleInfo;
+import org.osgi.impl.bundle.obr.resource.CapabilityImpl;
+import org.osgi.impl.bundle.obr.resource.RepositoryImpl;
+import org.osgi.impl.bundle.obr.resource.RequirementImpl;
+import org.osgi.impl.bundle.obr.resource.ResourceImpl;
+import org.osgi.impl.bundle.obr.resource.VersionRange;
+
+
+/**
+ * this class is used to configure bindex and get information built by bindex about targeted bundle.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class ExtractBindexInfo
+{
+
+ /**
+ * attribute get from bindex which describe targeted resource.
+ */
+ private ResourceImpl m_resource;
+
+
+ /**
+ * configure bindex and build information.
+ * @param repoFilename URI on OBR descriptor file
+ * @param outFile path on targeted jar-file
+ * @throws MojoExecutionException occurs if bindex configuration failed
+ */
+ public ExtractBindexInfo( URI repoFilename, String outFile ) throws MojoExecutionException
+ {
+
+ this.m_resource = null;
+ RepositoryImpl repository = null;
+ try
+ {
+ repository = new RepositoryImpl( new File( repoFilename ).getAbsoluteFile().toURL() );
+ }
+ catch ( MalformedURLException e )
+ {
+ e.printStackTrace();
+ throw new MojoExecutionException( "MalformedURLException" );
+ }
+ BundleInfo info = null;
+ try
+ {
+ info = new BundleInfo( repository, new File( outFile ) );
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ throw new MojoExecutionException( "Exception" );
+ }
+
+ try
+ {
+ m_resource = info.build();
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ throw new MojoExecutionException( "Exception" );
+ }
+ }
+
+
+ /**
+ * transform logical operator in xml syntax.
+ * @param filter string which contains logical operator
+ * @return string in correct xml syntax
+ */
+ private String parseFilter( String filter )
+ {
+ filter.replaceAll( "&", "&" );
+ filter.replaceAll( ">=", ">" );
+
+ return filter;
+ }
+
+
+ /**
+ * extract capabilities from bindex information.
+ * @return bundle capabilities List
+ */
+ public List getCapabilities()
+ {
+ List list = new ArrayList();
+ Collection res = m_resource.getCapabilityList();
+ Iterator it = res.iterator();
+ while ( it.hasNext() )
+ {
+ Capability capability = new Capability();
+ CapabilityImpl ci = ( CapabilityImpl ) it.next();
+ capability.setName( ci.getName() );
+ // System.out.println(ci.getName()) ;
+ if ( !( ci.getName().compareTo( "bundle" ) == 0 ) )
+ {
+ Map properties = ci.getProperties();
+ for ( Iterator k = properties.keySet().iterator(); k.hasNext(); )
+ {
+ PElement p = new PElement();
+ String key = ( String ) k.next();
+ List values = ( List ) properties.get( key );
+ for ( Iterator v = values.iterator(); v.hasNext(); )
+ {
+ Object value = v.next();
+ p.setN( key );
+ if ( value != null )
+ {
+ p.setV( value.toString() );
+ }
+ else
+ {
+ System.out.println( "Missing value " + key );
+ }
+ String type = null;
+ if ( value instanceof Number )
+ {
+ type = "number";
+ }
+ else
+ {
+ if ( value.getClass() == VersionRange.class )
+ {
+ type = "version";
+ }
+ }
+ if ( type != null )
+ {
+ p.setT( type );
+ }
+ }
+ capability.addP( p );
+ }
+
+ list.add( capability );
+ }
+ }
+ return list;
+ }
+
+
+ /**
+ * extract requirement from bindex information.
+ * @return bundle requirement List
+ */
+ public List getRequirement()
+ {
+ List list = new ArrayList();
+ Collection res = m_resource.getRequirementList();
+ Iterator it = res.iterator();
+ while ( it.hasNext() )
+ {
+ RequirementImpl ci = ( RequirementImpl ) it.next();
+ Require require = new Require();
+
+ require.setExtend( String.valueOf( ci.isExtend() ) );
+ require.setMultiple( String.valueOf( ci.isMultiple() ) );
+ require.setOptional( String.valueOf( ci.isOptional() ) );
+ require.setName( ci.getName() );
+ require.setFilter( this.parseFilter( ci.getFilter() ) );
+ require.setValue( ci.getComment() );
+ list.add( require );
+ }
+ return list;
+ }
+
+
+ /**
+ * extract symbolic name from bindex information.
+ * @return bundle symbolic name
+ */
+ public String getSymbolicName()
+ {
+ return m_resource.getSymbolicName();
+ }
+
+
+ /**
+ * extract version from bindex information.
+ * @return bundle version
+ */
+ public String getVersion()
+ {
+ if ( m_resource.getVersion() != null )
+ {
+ return m_resource.getVersion().toString();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * extract presentation name from bindex information.
+ * @return bundle presentation name
+ */
+ public String getPresentationName()
+ {
+ return m_resource.getPresentationName();
+ }
+
+
+ /**
+ * extract copyright from bindex information.
+ * @return bundle copyright
+ */
+ public String getCopyright()
+ {
+ return m_resource.getCopyright();
+ }
+
+
+ /**
+ * extract description from bindex information.
+ * @return bundle description
+ */
+ public String getDescription()
+ {
+ return m_resource.getDescription();
+ }
+
+
+ /**
+ * extract documentation from bindex information.
+ * @return bundle documentation
+ */
+ public String getDocumentation()
+ {
+ if ( m_resource.getDocumentation() != null )
+ {
+ return m_resource.getDocumentation().toString();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * extract license from bindex information.
+ * @return bundle license
+ */
+ public String getLicense()
+ {
+ if ( m_resource.getLicense() != null )
+ {
+ return m_resource.getLicense().toString();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * extract source from bindex information.
+ * @return bundle source
+ */
+ public String getSource()
+ {
+ if ( m_resource.getSource() != null )
+ {
+ return m_resource.getSource().toString();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * extract source from bindex information.
+ * @return bundle source
+ */
+ public String getId()
+ {
+ if ( m_resource.getId() != null )
+ {
+ return m_resource.getId();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrCleanRepo.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrCleanRepo.java
index d61a839..178b817 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrCleanRepo.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrCleanRepo.java
@@ -1,331 +1,331 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.Result;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-
-/**
- * Clean an OBR repository by finding and removing missing resources.
- * @goal clean
- * @phase install
- * @requiresDependencyResolution compile
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ObrCleanRepo extends AbstractMojo
-{
-
- /**
- * OBR Repository.
- *
- * @parameter expression="${obrRepository}"
- */
- private String obrRepository;
-
- /**
- * Local Repository.
- *
- * @parameter expression="${localRepository}"
- * @required
- * @readonly
- */
- private ArtifactRepository localRepository;
-
-
- public void execute() throws MojoExecutionException
- {
- // If no OBR repository, return
- if ( "NONE".equalsIgnoreCase( obrRepository ) )
- {
- return;
- }
-
- try
- {
- // Compute local repository location
- String localRepoPath = localRepository.getBasedir();
- PathFile repositoryXml = normalizeRepositoryPath( obrRepository, localRepoPath );
-
- // Check if the file exist
- if ( !repositoryXml.isExists() )
- {
- getLog().error( "The repository file " + repositoryXml.getAbsoluteFilename() + " does not exist" );
- return;
- }
-
- Document doc = parseFile( repositoryXml.getFile(), initConstructor() );
- Node finalDocument = cleanDocument( doc.getDocumentElement() ); //Analyze existing repository.
-
- if ( finalDocument == null )
- {
- getLog().info( "Nothing to clean in " + repositoryXml.getAbsoluteFilename() );
- }
- else
- {
- getLog().info( "Cleaning..." );
- writeToFile( repositoryXml.getUri(), finalDocument ); // Write the new file
- getLog().info( "Repository " + repositoryXml.getAbsoluteFilename() + " updated" );
- }
- }
- catch ( Exception e )
- {
- getLog().error( "Exception while cleaning the OBR repository file : " + e.getLocalizedMessage(), e );
- }
- }
-
-
- /**
- * Analyze the given XML tree (DOM of the repository file) and remove missing resources.
- * @param elem : the input XML tree
- * @return the cleaned XML tree
- */
- private Element cleanDocument( Element elem )
- {
- NodeList nodes = elem.getElementsByTagName( "resource" );
- List toRemove = new ArrayList();
-
- // First, look for missing resources
- for ( int i = 0; i < nodes.getLength(); i++ )
- {
- Element n = ( Element ) nodes.item( i );
- String value = n.getAttribute( "uri" );
-
- String localRepoPath = localRepository.getBasedir();
- File file = new File( localRepoPath, value );
-
- if ( !file.exists() )
- {
- getLog().info(
- "The bundle " + n.getAttribute( "presentationname" ) + " - " + n.getAttribute( "version" )
- + " will be removed" );
- toRemove.add( n );
- }
- }
-
- if ( toRemove.size() > 0 )
- {
- // Then remove missing resources.
- for ( int i = 0; i < toRemove.size(); i++ )
- {
- elem.removeChild( ( Node ) toRemove.get( i ) );
- }
-
- // If we have to remove resources, we need to update 'lastmodified' attribute
- SimpleDateFormat format = new SimpleDateFormat( "yyyyMMddHHmmss.SSS" );
- Date d = new Date();
- d.setTime( System.currentTimeMillis() );
- elem.setAttribute( "lastmodified", format.format( d ) );
- return elem;
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * Initialize the document builder from Xerces.
- * @return DocumentBuilder ready to create new document
- * @throws MojoExecutionException : occurs when the instantiation of the document builder fails
- */
- private DocumentBuilder initConstructor() throws MojoExecutionException
- {
- DocumentBuilder constructor = null;
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- try
- {
- constructor = factory.newDocumentBuilder();
- }
- catch ( ParserConfigurationException e )
- {
- getLog().error( "Unable to create a new xml document" );
- throw new MojoExecutionException( "Cannot create the Document Builder : " + e.getMessage() );
- }
- return constructor;
- }
-
-
- /**
- * Open an XML file.
- * @param filename : XML file path
- * @param constructor DocumentBuilder get from xerces
- * @return Document which describes this file
- * @throws MojoExecutionException occurs when the given file cannot be opened or is a valid XML file.
- */
- private Document parseFile( File file, DocumentBuilder constructor ) throws MojoExecutionException
- {
- if ( constructor == null )
- {
- return null;
- }
- // The document is the root of the DOM tree.
- getLog().info( "Parsing " + file.getAbsolutePath() );
- Document doc = null;
- try
- {
- doc = constructor.parse( file );
- }
- catch ( SAXException e )
- {
- getLog().error( "Cannot parse " + file.getAbsolutePath() + " : " + e.getMessage() );
- throw new MojoExecutionException( "Cannot parse " + file.getAbsolutePath() + " : " + e.getMessage() );
- }
- catch ( IOException e )
- {
- getLog().error( "Cannot open " + file.getAbsolutePath() + " : " + e.getMessage() );
- throw new MojoExecutionException( "Cannot open " + file.getAbsolutePath() + " : " + e.getMessage() );
- }
- return doc;
- }
-
-
- /**
- * write a Node in a xml file.
- * @param outputFilename URI to the output file
- * @param treeToBeWrite Node root of the tree to be write in file
- * @throws MojoExecutionException if the plugin failed
- */
- private void writeToFile( URI outputFilename, Node treeToBeWrite ) throws MojoExecutionException
- {
- // init the transformer
- Transformer transformer = null;
- TransformerFactory tfabrique = TransformerFactory.newInstance();
- try
- {
- transformer = tfabrique.newTransformer();
- }
- catch ( TransformerConfigurationException e )
- {
- getLog().error( "Unable to write to file: " + outputFilename.toString() );
- throw new MojoExecutionException( "Unable to write to file: " + outputFilename.toString() + " : "
- + e.getMessage() );
- }
- Properties proprietes = new Properties();
- proprietes.put( "method", "xml" );
- proprietes.put( "version", "1.0" );
- proprietes.put( "encoding", "ISO-8859-1" );
- proprietes.put( "standalone", "yes" );
- proprietes.put( "indent", "yes" );
- proprietes.put( "omit-xml-declaration", "no" );
- transformer.setOutputProperties( proprietes );
-
- DOMSource input = new DOMSource( treeToBeWrite );
-
- File fichier = new File( outputFilename );
- FileOutputStream flux = null;
- try
- {
- flux = new FileOutputStream( fichier );
- }
- catch ( FileNotFoundException e )
- {
- getLog().error( "Unable to write to file: " + fichier.getName() );
- throw new MojoExecutionException( "Unable to write to file: " + fichier.getName() + " : " + e.getMessage() );
- }
- Result output = new StreamResult( flux );
- try
- {
- transformer.transform( input, output );
- }
- catch ( TransformerException e )
- {
- throw new MojoExecutionException( "Unable to write to file: " + outputFilename.toString() + " : "
- + e.getMessage() );
- }
-
- try
- {
- flux.flush();
- flux.close();
- }
- catch ( IOException e )
- {
- throw new MojoExecutionException( "IOException when closing file : " + e.getMessage() );
- }
-
- }
-
-
- private static PathFile normalizeRepositoryPath( String obrPath, String mavenPath )
- {
- if ( null == obrPath || obrPath.length() == 0 )
- {
- obrPath = mavenPath + File.separatorChar + "repository.xml";
- }
- else if ( !obrPath.endsWith( ".xml" ) )
- {
- obrPath = obrPath + File.separatorChar + "repository.xml";
- }
-
- URI uri;
- try
- {
- uri = new URI( obrPath );
- }
- catch ( URISyntaxException e )
- {
- uri = null;
- }
-
- if ( null == uri || !uri.isAbsolute() )
- {
- File file = new File( obrPath );
- if ( !file.isAbsolute() )
- {
- file = new File( mavenPath, obrPath );
- }
-
- uri = file.toURI();
- }
-
- return new PathFile( uri.toASCIIString() );
- }
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Result;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+
+/**
+ * Clean an OBR repository by finding and removing missing resources.
+ * @goal clean
+ * @phase install
+ * @requiresDependencyResolution compile
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class ObrCleanRepo extends AbstractMojo
+{
+
+ /**
+ * OBR Repository.
+ *
+ * @parameter expression="${obrRepository}"
+ */
+ private String obrRepository;
+
+ /**
+ * Local Repository.
+ *
+ * @parameter expression="${localRepository}"
+ * @required
+ * @readonly
+ */
+ private ArtifactRepository localRepository;
+
+
+ public void execute() throws MojoExecutionException
+ {
+ // If no OBR repository, return
+ if ( "NONE".equalsIgnoreCase( obrRepository ) )
+ {
+ return;
+ }
+
+ try
+ {
+ // Compute local repository location
+ String localRepoPath = localRepository.getBasedir();
+ PathFile repositoryXml = normalizeRepositoryPath( obrRepository, localRepoPath );
+
+ // Check if the file exist
+ if ( !repositoryXml.isExists() )
+ {
+ getLog().error( "The repository file " + repositoryXml.getAbsoluteFilename() + " does not exist" );
+ return;
+ }
+
+ Document doc = parseFile( repositoryXml.getFile(), initConstructor() );
+ Node finalDocument = cleanDocument( doc.getDocumentElement() ); //Analyze existing repository.
+
+ if ( finalDocument == null )
+ {
+ getLog().info( "Nothing to clean in " + repositoryXml.getAbsoluteFilename() );
+ }
+ else
+ {
+ getLog().info( "Cleaning..." );
+ writeToFile( repositoryXml.getUri(), finalDocument ); // Write the new file
+ getLog().info( "Repository " + repositoryXml.getAbsoluteFilename() + " updated" );
+ }
+ }
+ catch ( Exception e )
+ {
+ getLog().error( "Exception while cleaning the OBR repository file : " + e.getLocalizedMessage(), e );
+ }
+ }
+
+
+ /**
+ * Analyze the given XML tree (DOM of the repository file) and remove missing resources.
+ * @param elem : the input XML tree
+ * @return the cleaned XML tree
+ */
+ private Element cleanDocument( Element elem )
+ {
+ NodeList nodes = elem.getElementsByTagName( "resource" );
+ List toRemove = new ArrayList();
+
+ // First, look for missing resources
+ for ( int i = 0; i < nodes.getLength(); i++ )
+ {
+ Element n = ( Element ) nodes.item( i );
+ String value = n.getAttribute( "uri" );
+
+ String localRepoPath = localRepository.getBasedir();
+ File file = new File( localRepoPath, value );
+
+ if ( !file.exists() )
+ {
+ getLog().info(
+ "The bundle " + n.getAttribute( "presentationname" ) + " - " + n.getAttribute( "version" )
+ + " will be removed" );
+ toRemove.add( n );
+ }
+ }
+
+ if ( toRemove.size() > 0 )
+ {
+ // Then remove missing resources.
+ for ( int i = 0; i < toRemove.size(); i++ )
+ {
+ elem.removeChild( ( Node ) toRemove.get( i ) );
+ }
+
+ // If we have to remove resources, we need to update 'lastmodified' attribute
+ SimpleDateFormat format = new SimpleDateFormat( "yyyyMMddHHmmss.SSS" );
+ Date d = new Date();
+ d.setTime( System.currentTimeMillis() );
+ elem.setAttribute( "lastmodified", format.format( d ) );
+ return elem;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * Initialize the document builder from Xerces.
+ * @return DocumentBuilder ready to create new document
+ * @throws MojoExecutionException : occurs when the instantiation of the document builder fails
+ */
+ private DocumentBuilder initConstructor() throws MojoExecutionException
+ {
+ DocumentBuilder constructor = null;
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ try
+ {
+ constructor = factory.newDocumentBuilder();
+ }
+ catch ( ParserConfigurationException e )
+ {
+ getLog().error( "Unable to create a new xml document" );
+ throw new MojoExecutionException( "Cannot create the Document Builder : " + e.getMessage() );
+ }
+ return constructor;
+ }
+
+
+ /**
+ * Open an XML file.
+ * @param filename : XML file path
+ * @param constructor DocumentBuilder get from xerces
+ * @return Document which describes this file
+ * @throws MojoExecutionException occurs when the given file cannot be opened or is a valid XML file.
+ */
+ private Document parseFile( File file, DocumentBuilder constructor ) throws MojoExecutionException
+ {
+ if ( constructor == null )
+ {
+ return null;
+ }
+ // The document is the root of the DOM tree.
+ getLog().info( "Parsing " + file.getAbsolutePath() );
+ Document doc = null;
+ try
+ {
+ doc = constructor.parse( file );
+ }
+ catch ( SAXException e )
+ {
+ getLog().error( "Cannot parse " + file.getAbsolutePath() + " : " + e.getMessage() );
+ throw new MojoExecutionException( "Cannot parse " + file.getAbsolutePath() + " : " + e.getMessage() );
+ }
+ catch ( IOException e )
+ {
+ getLog().error( "Cannot open " + file.getAbsolutePath() + " : " + e.getMessage() );
+ throw new MojoExecutionException( "Cannot open " + file.getAbsolutePath() + " : " + e.getMessage() );
+ }
+ return doc;
+ }
+
+
+ /**
+ * write a Node in a xml file.
+ * @param outputFilename URI to the output file
+ * @param treeToBeWrite Node root of the tree to be write in file
+ * @throws MojoExecutionException if the plugin failed
+ */
+ private void writeToFile( URI outputFilename, Node treeToBeWrite ) throws MojoExecutionException
+ {
+ // init the transformer
+ Transformer transformer = null;
+ TransformerFactory tfabrique = TransformerFactory.newInstance();
+ try
+ {
+ transformer = tfabrique.newTransformer();
+ }
+ catch ( TransformerConfigurationException e )
+ {
+ getLog().error( "Unable to write to file: " + outputFilename.toString() );
+ throw new MojoExecutionException( "Unable to write to file: " + outputFilename.toString() + " : "
+ + e.getMessage() );
+ }
+ Properties proprietes = new Properties();
+ proprietes.put( "method", "xml" );
+ proprietes.put( "version", "1.0" );
+ proprietes.put( "encoding", "ISO-8859-1" );
+ proprietes.put( "standalone", "yes" );
+ proprietes.put( "indent", "yes" );
+ proprietes.put( "omit-xml-declaration", "no" );
+ transformer.setOutputProperties( proprietes );
+
+ DOMSource input = new DOMSource( treeToBeWrite );
+
+ File fichier = new File( outputFilename );
+ FileOutputStream flux = null;
+ try
+ {
+ flux = new FileOutputStream( fichier );
+ }
+ catch ( FileNotFoundException e )
+ {
+ getLog().error( "Unable to write to file: " + fichier.getName() );
+ throw new MojoExecutionException( "Unable to write to file: " + fichier.getName() + " : " + e.getMessage() );
+ }
+ Result output = new StreamResult( flux );
+ try
+ {
+ transformer.transform( input, output );
+ }
+ catch ( TransformerException e )
+ {
+ throw new MojoExecutionException( "Unable to write to file: " + outputFilename.toString() + " : "
+ + e.getMessage() );
+ }
+
+ try
+ {
+ flux.flush();
+ flux.close();
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "IOException when closing file : " + e.getMessage() );
+ }
+
+ }
+
+
+ private static PathFile normalizeRepositoryPath( String obrPath, String mavenPath )
+ {
+ if ( null == obrPath || obrPath.length() == 0 )
+ {
+ obrPath = mavenPath + File.separatorChar + "repository.xml";
+ }
+ else if ( !obrPath.endsWith( ".xml" ) )
+ {
+ obrPath = obrPath + File.separatorChar + "repository.xml";
+ }
+
+ URI uri;
+ try
+ {
+ uri = new URI( obrPath );
+ }
+ catch ( URISyntaxException e )
+ {
+ uri = null;
+ }
+
+ if ( null == uri || !uri.isAbsolute() )
+ {
+ File file = new File( obrPath );
+ if ( !file.isAbsolute() )
+ {
+ file = new File( mavenPath, obrPath );
+ }
+
+ uri = file.toURI();
+ }
+
+ return new PathFile( uri.toASCIIString() );
+ }
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeploy.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeploy.java
index 5eea1a3..83a847d 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeploy.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeploy.java
@@ -1,374 +1,374 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-
-import org.apache.maven.artifact.manager.WagonManager;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.settings.Settings;
-import org.apache.maven.wagon.ResourceDoesNotExistException;
-import org.apache.maven.wagon.TransferFailedException;
-import org.apache.maven.wagon.authorization.AuthorizationException;
-
-
-/**
- * deploy the bundle to a remote site.
- * this goal is used when you compile a project with a pom file
- * @goal deployment
- * @phase deploy
- * @requiresDependencyResolution compile
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-
-public class ObrDeploy extends AbstractMojo
-{
-
- /**
- * setting of maven.
- *
- * @parameter expression="${settings}"
- * @require
- */
- private Settings m_settings;
-
- /**
- * name of the repository xml descriptor file.
- *
- * @parameter expression="${repository-name}" default-value="repository.xml"
- */
- private String m_repositoryName;
-
- /**
- * The local Maven repository.
- *
- * @parameter expression="${localRepository}"
- * @required
- */
- private ArtifactRepository m_localRepo;
-
- /**
- * Project in use.
- *
- * @parameter expression="${project}"
- * @require
- */
- private MavenProject m_project;
-
- /**
- * Wagon Manager.
- * @component
- */
- private WagonManager m_wagonManager;
-
- /**
- * obr file define by the user.
- *
- * @parameter expression="${ignore-lock}"
- *
- */
- private boolean m_ignoreLock;
-
- /**
- * used to store pathfile in local repo.
- */
- private String m_fileInLocalRepo;
-
- /**
- * Enable/Disable this goal
- * @description If true evrything the goal do nothing, the goal just skip over
- * @parameter expression="${maven.obr.installToRemoteOBR}" default-value="false"
- */
- private boolean installToRemoteOBR;
-
-
- /**
- * main method for this goal.
- * @implements org.apache.maven.plugin.Mojo.execute
- * @throws MojoExecutionException if the plugin failed
- * @throws MojoFailureException if the plugin failed
- */
- public void execute() throws MojoExecutionException, MojoFailureException
- {
- getLog().info( "Obr-deploy start:" );
- if ( !installToRemoteOBR )
- {
- getLog().info( "maven-obr-plugin:deploy goal is disable due to one of the following reason:" );
- getLog().info( " - 'installToRemoteOBR' configuration set to false" );
- getLog().info( " - JVM property maven.obr.installToRemoteOBR set to false" );
- return;
- }
- ArtifactRepository ar = m_project.getDistributionManagementArtifactRepository();
-
- // locate the obr.xml file
- String obrXmlFile = null;
- List l = m_project.getResources();
- for ( int i = 0; i < l.size(); i++ )
- {
- File f = new File( ( ( Resource ) l.get( i ) ).getDirectory() + File.separator + "obr.xml" );
- if ( f.exists() )
- {
- obrXmlFile = ( ( Resource ) l.get( i ) ).getDirectory() + File.separator + "obr.xml";
- break;
- }
- }
-
- // the obr.xml file is not present
- if ( obrXmlFile == null )
- {
- getLog().warn( "obr.xml is not present, use default" );
- }
-
- File repoDescriptorFile = null;
-
- // init the wagon connection
- RemoteFileManager remoteFile = new RemoteFileManager( ar, m_wagonManager, m_settings, getLog() );
- remoteFile.connect();
-
- // create a non-empty file used to lock the repository descriptor file
- File lockFile = null;
- Writer output = null;
- try
- {
- lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
- output = new BufferedWriter( new FileWriter( lockFile ) );
- output.write( "locked" );
- output.close();
- }
- catch ( IOException e )
- {
- getLog().error( "Unable to create temporary file" );
- throw new MojoFailureException( "IOException" );
- }
-
- if ( m_ignoreLock )
- {
- try
- {
- remoteFile.put( lockFile, m_repositoryName + ".lock" );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
-
- }
- catch ( ResourceDoesNotExistException e )
- {
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
-
- }
- else
- {
- int countError = 0;
- while ( remoteFile.isLockedFile( remoteFile, m_repositoryName ) && countError < 2 )
- {
- countError++;
- getLog().warn( "File is locked, retry in 10s" );
- try
- {
- Thread.sleep( 10000 );
- }
- catch ( InterruptedException e )
- {
- getLog().warn( "Sleep interupted" );
- }
- }
-
- if ( countError == 2 )
- {
- getLog().error(
- "File: " + m_repositoryName + " is locked. Try -Dignore-lock=true if you want force uploading" );
- throw new MojoFailureException( "fileLocked" );
- }
- }
-
- // file is not locked, so we lock it now
- try
- {
- remoteFile.put( lockFile, m_repositoryName + ".lock" );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
-
- }
- catch ( ResourceDoesNotExistException e )
- {
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
-
- try
- {
- repoDescriptorFile = remoteFile.get( m_repositoryName );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
-
- }
- catch ( ResourceDoesNotExistException e )
- {
- // file doesn't exist! create a new one
- getLog().warn( "file specified does not exist: " + m_repositoryName );
- getLog().warn( "Create a new repository descriptor file " + m_repositoryName );
- try
- {
- File f = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
- repoDescriptorFile = new File( f.getParent() + File.separator
- + String.valueOf( System.currentTimeMillis() ) + ".xml" );
- }
- catch ( IOException e1 )
- {
- getLog().error( "canno't create temporary file" );
- e1.printStackTrace();
- return;
- }
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
- catch ( IOException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "IOException" );
- }
-
- Config userConfig = new Config();
- userConfig.setPathRelative( true );
- userConfig.setRemotely( true );
-
- PathFile file = null;
-
- // get the path to local maven repository
- file = new PathFile( PathFile.uniformSeparator( m_settings.getLocalRepository() ) + File.separator
- + PathFile.uniformSeparator( m_localRepo.pathOf( m_project.getArtifact() ) ) );
- if ( file.isExists() )
- {
- m_fileInLocalRepo = file.getOnlyAbsoluteFilename();
- }
- else
- {
- getLog().error(
- "file not found in local repository: " + m_settings.getLocalRepository() + File.separator
- + m_localRepo.pathOf( m_project.getArtifact() ) );
- return;
- }
-
- file = new PathFile( "file:/" + repoDescriptorFile.getAbsolutePath() );
-
- ObrUpdate obrUpdate = new ObrUpdate( file, obrXmlFile, m_project, m_fileInLocalRepo, PathFile
- .uniformSeparator( m_settings.getLocalRepository() ), userConfig, getLog() );
-
- obrUpdate.updateRepository();
-
- // the reposiroty descriptor file is modified, we upload it on the remote repository
- try
- {
- remoteFile.put( repoDescriptorFile, m_repositoryName );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
- }
- catch ( ResourceDoesNotExistException e )
- {
- getLog().error( "Resource does not exist:" + repoDescriptorFile.getName() );
- e.printStackTrace();
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
- repoDescriptorFile.delete();
-
- // we remove lockFile activation
- lockFile = null;
- try
- {
- lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
- }
- catch ( IOException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "IOException" );
- }
- try
- {
- remoteFile.put( lockFile, m_repositoryName + ".lock" );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
- }
- catch ( ResourceDoesNotExistException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
-
- remoteFile.disconnect();
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.List;
+
+import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Resource;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+
+
+/**
+ * deploy the bundle to a remote site.
+ * this goal is used when you compile a project with a pom file
+ * @goal deployment
+ * @phase deploy
+ * @requiresDependencyResolution compile
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+
+public class ObrDeploy extends AbstractMojo
+{
+
+ /**
+ * setting of maven.
+ *
+ * @parameter expression="${settings}"
+ * @require
+ */
+ private Settings m_settings;
+
+ /**
+ * name of the repository xml descriptor file.
+ *
+ * @parameter expression="${repository-name}" default-value="repository.xml"
+ */
+ private String m_repositoryName;
+
+ /**
+ * The local Maven repository.
+ *
+ * @parameter expression="${localRepository}"
+ * @required
+ */
+ private ArtifactRepository m_localRepo;
+
+ /**
+ * Project in use.
+ *
+ * @parameter expression="${project}"
+ * @require
+ */
+ private MavenProject m_project;
+
+ /**
+ * Wagon Manager.
+ * @component
+ */
+ private WagonManager m_wagonManager;
+
+ /**
+ * obr file define by the user.
+ *
+ * @parameter expression="${ignore-lock}"
+ *
+ */
+ private boolean m_ignoreLock;
+
+ /**
+ * used to store pathfile in local repo.
+ */
+ private String m_fileInLocalRepo;
+
+ /**
+ * Enable/Disable this goal
+ * @description If true evrything the goal do nothing, the goal just skip over
+ * @parameter expression="${maven.obr.installToRemoteOBR}" default-value="false"
+ */
+ private boolean installToRemoteOBR;
+
+
+ /**
+ * main method for this goal.
+ * @implements org.apache.maven.plugin.Mojo.execute
+ * @throws MojoExecutionException if the plugin failed
+ * @throws MojoFailureException if the plugin failed
+ */
+ public void execute() throws MojoExecutionException, MojoFailureException
+ {
+ getLog().info( "Obr-deploy start:" );
+ if ( !installToRemoteOBR )
+ {
+ getLog().info( "maven-obr-plugin:deploy goal is disable due to one of the following reason:" );
+ getLog().info( " - 'installToRemoteOBR' configuration set to false" );
+ getLog().info( " - JVM property maven.obr.installToRemoteOBR set to false" );
+ return;
+ }
+ ArtifactRepository ar = m_project.getDistributionManagementArtifactRepository();
+
+ // locate the obr.xml file
+ String obrXmlFile = null;
+ List l = m_project.getResources();
+ for ( int i = 0; i < l.size(); i++ )
+ {
+ File f = new File( ( ( Resource ) l.get( i ) ).getDirectory() + File.separator + "obr.xml" );
+ if ( f.exists() )
+ {
+ obrXmlFile = ( ( Resource ) l.get( i ) ).getDirectory() + File.separator + "obr.xml";
+ break;
+ }
+ }
+
+ // the obr.xml file is not present
+ if ( obrXmlFile == null )
+ {
+ getLog().warn( "obr.xml is not present, use default" );
+ }
+
+ File repoDescriptorFile = null;
+
+ // init the wagon connection
+ RemoteFileManager remoteFile = new RemoteFileManager( ar, m_wagonManager, m_settings, getLog() );
+ remoteFile.connect();
+
+ // create a non-empty file used to lock the repository descriptor file
+ File lockFile = null;
+ Writer output = null;
+ try
+ {
+ lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
+ output = new BufferedWriter( new FileWriter( lockFile ) );
+ output.write( "locked" );
+ output.close();
+ }
+ catch ( IOException e )
+ {
+ getLog().error( "Unable to create temporary file" );
+ throw new MojoFailureException( "IOException" );
+ }
+
+ if ( m_ignoreLock )
+ {
+ try
+ {
+ remoteFile.put( lockFile, m_repositoryName + ".lock" );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+
+ }
+ else
+ {
+ int countError = 0;
+ while ( remoteFile.isLockedFile( remoteFile, m_repositoryName ) && countError < 2 )
+ {
+ countError++;
+ getLog().warn( "File is locked, retry in 10s" );
+ try
+ {
+ Thread.sleep( 10000 );
+ }
+ catch ( InterruptedException e )
+ {
+ getLog().warn( "Sleep interupted" );
+ }
+ }
+
+ if ( countError == 2 )
+ {
+ getLog().error(
+ "File: " + m_repositoryName + " is locked. Try -Dignore-lock=true if you want force uploading" );
+ throw new MojoFailureException( "fileLocked" );
+ }
+ }
+
+ // file is not locked, so we lock it now
+ try
+ {
+ remoteFile.put( lockFile, m_repositoryName + ".lock" );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+
+ try
+ {
+ repoDescriptorFile = remoteFile.get( m_repositoryName );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ // file doesn't exist! create a new one
+ getLog().warn( "file specified does not exist: " + m_repositoryName );
+ getLog().warn( "Create a new repository descriptor file " + m_repositoryName );
+ try
+ {
+ File f = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
+ repoDescriptorFile = new File( f.getParent() + File.separator
+ + String.valueOf( System.currentTimeMillis() ) + ".xml" );
+ }
+ catch ( IOException e1 )
+ {
+ getLog().error( "canno't create temporary file" );
+ e1.printStackTrace();
+ return;
+ }
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "IOException" );
+ }
+
+ Config userConfig = new Config();
+ userConfig.setPathRelative( true );
+ userConfig.setRemotely( true );
+
+ PathFile file = null;
+
+ // get the path to local maven repository
+ file = new PathFile( PathFile.uniformSeparator( m_settings.getLocalRepository() ) + File.separator
+ + PathFile.uniformSeparator( m_localRepo.pathOf( m_project.getArtifact() ) ) );
+ if ( file.isExists() )
+ {
+ m_fileInLocalRepo = file.getOnlyAbsoluteFilename();
+ }
+ else
+ {
+ getLog().error(
+ "file not found in local repository: " + m_settings.getLocalRepository() + File.separator
+ + m_localRepo.pathOf( m_project.getArtifact() ) );
+ return;
+ }
+
+ file = new PathFile( "file:/" + repoDescriptorFile.getAbsolutePath() );
+
+ ObrUpdate obrUpdate = new ObrUpdate( file, obrXmlFile, m_project, m_fileInLocalRepo, PathFile
+ .uniformSeparator( m_settings.getLocalRepository() ), userConfig, getLog() );
+
+ obrUpdate.updateRepository();
+
+ // the reposiroty descriptor file is modified, we upload it on the remote repository
+ try
+ {
+ remoteFile.put( repoDescriptorFile, m_repositoryName );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ getLog().error( "Resource does not exist:" + repoDescriptorFile.getName() );
+ e.printStackTrace();
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+ repoDescriptorFile.delete();
+
+ // we remove lockFile activation
+ lockFile = null;
+ try
+ {
+ lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "IOException" );
+ }
+ try
+ {
+ remoteFile.put( lockFile, m_repositoryName + ".lock" );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+
+ remoteFile.disconnect();
+ }
+
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeployFile.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeployFile.java
index 4eb126e..2f7f6b5 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeployFile.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrDeployFile.java
@@ -1,352 +1,352 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-
-import org.apache.maven.artifact.manager.WagonManager;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.settings.Settings;
-import org.apache.maven.wagon.ResourceDoesNotExistException;
-import org.apache.maven.wagon.TransferFailedException;
-import org.apache.maven.wagon.authorization.AuthorizationException;
-
-
-/**
- * deploy the bundle to a ftp site.
- * this goal is used when you upload a jar file (in command line)
- * @goal deploy-file
- * @phase deploy
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ObrDeployFile extends AbstractMojo
-{
-
- /**
- * setting of maven.
- *
- * @parameter expression="${settings}"
- * @require
- */
-
- private Settings m_settings;
-
- /**
- * name of the repository xml descriptor file.
- *
- * @parameter expression="${repository-name}" default-value="repository.xml"
- */
- private String m_repositoryName;
-
- /**
- * The local Maven repository.
- *
- * @parameter expression="${localRepository}"
- * @required
- */
- private ArtifactRepository m_localRepo;
-
- /**
- * Project in use.
- *
- * @parameter expression="${project}"
- * @require
- */
- private MavenProject m_project;
-
- /**
- * Wagon Manager.
- * @component
- */
- private WagonManager m_wagonManager;
-
- /**
- * obr file define by the user.
- *
- * @parameter expression="${obr-file}"
- *
- */
- private String m_obrFile;
-
- /**
- * obr file define by the user.
- *
- * @parameter expression="${ignore-lock}"
- *
- */
- private boolean m_ignoreLock;
-
- /**
- * used to store pathfile in local repo.
- */
- private String m_fileInLocalRepo;
-
-
- /**
- * main method for this goal.
- * @implements org.apache.maven.plugin.Mojo.execute
- * @throws MojoExecutionException if the plugin failed
- * @throws MojoFailureException if the plugin failed
- */
- public void execute() throws MojoExecutionException, MojoFailureException
- {
- getLog().info( "Obr-deploy-file start:" );
-
- ArtifactRepository ar = m_project.getDistributionManagementArtifactRepository();
-
- // locate the obr.xml file
- PathFile fileObrXml = new PathFile( m_obrFile );
- if ( !fileObrXml.isExists() )
- {
- getLog().warn( "obr.xml file not found, use default" );
- }
-
- File repoDescriptorFile = null;
-
- RemoteFileManager remoteFile = new RemoteFileManager( ar, m_wagonManager, m_settings, getLog() );
-
- remoteFile.connect();
-
- // create a non-empty file used to lock the repository descriptor file
- File lockFile = null;
- Writer output = null;
- try
- {
- lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
- output = new BufferedWriter( new FileWriter( lockFile ) );
- output.write( "locked" );
- output.close();
- }
- catch ( IOException e )
- {
- getLog().error( "Unable to create temporary file" );
- throw new MojoFailureException( "IOException" );
- }
-
- if ( m_ignoreLock )
- {
- try
- {
- remoteFile.put( lockFile, m_repositoryName + ".lock" );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
-
- }
- catch ( ResourceDoesNotExistException e )
- {
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
-
- }
- else
- {
- int countError = 0;
- while ( remoteFile.isLockedFile( remoteFile, m_repositoryName ) && countError < 2 )
- {
- countError++;
- getLog().warn( "File is locked, retry in 10s" );
- try
- {
- Thread.sleep( 10000 );
- }
- catch ( InterruptedException e )
- {
- getLog().warn( "Sleep Interupted" );
- }
- }
-
- if ( countError == 2 )
- {
- getLog().error(
- "File: " + m_repositoryName + " is locked. Try -Dignore-lock=true if you want to force uploading" );
- throw new MojoFailureException( "fileLocked" );
- }
- }
-
- // file is not locked, so we lock it now
- try
- {
- remoteFile.put( lockFile, m_repositoryName + ".lock" );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
-
- }
- catch ( ResourceDoesNotExistException e )
- {
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
-
- try
- {
- repoDescriptorFile = remoteFile.get( m_repositoryName );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
-
- }
- catch ( ResourceDoesNotExistException e )
- {
- // file doesn't exist! create a new one
- getLog().warn( "file specified does not exist: " + m_repositoryName );
- getLog().warn( "Create a new repository descriptor file " + m_repositoryName );
- try
- {
- File f = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
- repoDescriptorFile = new File( f.getParent() + File.separator
- + String.valueOf( System.currentTimeMillis() ) + ".xml" );
- }
- catch ( IOException e1 )
- {
- getLog().error( "canno't create temporary file" );
- e1.printStackTrace();
- return;
- }
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
- catch ( IOException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "IOException" );
- }
-
- Config userConfig = new Config();
- userConfig.setPathRelative( true );
- userConfig.setRemotely( true );
-
- PathFile file = null;
-
- // get the path to local maven repository
- file = new PathFile( PathFile.uniformSeparator( m_settings.getLocalRepository() ) + File.separator
- + PathFile.uniformSeparator( m_localRepo.pathOf( m_project.getArtifact() ) ) );
- if ( file.isExists() )
- {
- m_fileInLocalRepo = file.getOnlyAbsoluteFilename();
- }
- else
- {
- getLog().error(
- "file not found in local repository: " + m_settings.getLocalRepository() + File.separator
- + m_localRepo.pathOf( m_project.getArtifact() ) );
- return;
- }
-
- file = new PathFile( "file:/" + repoDescriptorFile.getAbsolutePath() );
-
- ObrUpdate obrUpdate = new ObrUpdate( file, fileObrXml.getOnlyAbsoluteFilename(), m_project, m_fileInLocalRepo,
- PathFile.uniformSeparator( m_settings.getLocalRepository() ), userConfig, getLog() );
-
- obrUpdate.updateRepository();
-
- // the reposiroty descriptor file is modified, we upload it on the remote repository
- try
- {
- remoteFile.put( repoDescriptorFile, m_repositoryName );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
- }
- catch ( ResourceDoesNotExistException e )
- {
- getLog().error( "Resource does not exist:" + repoDescriptorFile.getName() );
- e.printStackTrace();
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
- repoDescriptorFile.delete();
-
- // we remove lockFile activation
- lockFile = null;
- try
- {
- lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
- }
- catch ( IOException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "IOException" );
- }
- try
- {
- remoteFile.put( lockFile, m_repositoryName + ".lock" );
- }
- catch ( TransferFailedException e )
- {
- getLog().error( "Transfer failed" );
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
- }
- catch ( ResourceDoesNotExistException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "ResourceDoesNotExistException" );
- }
- catch ( AuthorizationException e )
- {
- getLog().error( "Authorization failed" );
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
- remoteFile.disconnect();
- }
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+
+
+/**
+ * deploy the bundle to a ftp site.
+ * this goal is used when you upload a jar file (in command line)
+ * @goal deploy-file
+ * @phase deploy
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class ObrDeployFile extends AbstractMojo
+{
+
+ /**
+ * setting of maven.
+ *
+ * @parameter expression="${settings}"
+ * @require
+ */
+
+ private Settings m_settings;
+
+ /**
+ * name of the repository xml descriptor file.
+ *
+ * @parameter expression="${repository-name}" default-value="repository.xml"
+ */
+ private String m_repositoryName;
+
+ /**
+ * The local Maven repository.
+ *
+ * @parameter expression="${localRepository}"
+ * @required
+ */
+ private ArtifactRepository m_localRepo;
+
+ /**
+ * Project in use.
+ *
+ * @parameter expression="${project}"
+ * @require
+ */
+ private MavenProject m_project;
+
+ /**
+ * Wagon Manager.
+ * @component
+ */
+ private WagonManager m_wagonManager;
+
+ /**
+ * obr file define by the user.
+ *
+ * @parameter expression="${obr-file}"
+ *
+ */
+ private String m_obrFile;
+
+ /**
+ * obr file define by the user.
+ *
+ * @parameter expression="${ignore-lock}"
+ *
+ */
+ private boolean m_ignoreLock;
+
+ /**
+ * used to store pathfile in local repo.
+ */
+ private String m_fileInLocalRepo;
+
+
+ /**
+ * main method for this goal.
+ * @implements org.apache.maven.plugin.Mojo.execute
+ * @throws MojoExecutionException if the plugin failed
+ * @throws MojoFailureException if the plugin failed
+ */
+ public void execute() throws MojoExecutionException, MojoFailureException
+ {
+ getLog().info( "Obr-deploy-file start:" );
+
+ ArtifactRepository ar = m_project.getDistributionManagementArtifactRepository();
+
+ // locate the obr.xml file
+ PathFile fileObrXml = new PathFile( m_obrFile );
+ if ( !fileObrXml.isExists() )
+ {
+ getLog().warn( "obr.xml file not found, use default" );
+ }
+
+ File repoDescriptorFile = null;
+
+ RemoteFileManager remoteFile = new RemoteFileManager( ar, m_wagonManager, m_settings, getLog() );
+
+ remoteFile.connect();
+
+ // create a non-empty file used to lock the repository descriptor file
+ File lockFile = null;
+ Writer output = null;
+ try
+ {
+ lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
+ output = new BufferedWriter( new FileWriter( lockFile ) );
+ output.write( "locked" );
+ output.close();
+ }
+ catch ( IOException e )
+ {
+ getLog().error( "Unable to create temporary file" );
+ throw new MojoFailureException( "IOException" );
+ }
+
+ if ( m_ignoreLock )
+ {
+ try
+ {
+ remoteFile.put( lockFile, m_repositoryName + ".lock" );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+
+ }
+ else
+ {
+ int countError = 0;
+ while ( remoteFile.isLockedFile( remoteFile, m_repositoryName ) && countError < 2 )
+ {
+ countError++;
+ getLog().warn( "File is locked, retry in 10s" );
+ try
+ {
+ Thread.sleep( 10000 );
+ }
+ catch ( InterruptedException e )
+ {
+ getLog().warn( "Sleep Interupted" );
+ }
+ }
+
+ if ( countError == 2 )
+ {
+ getLog().error(
+ "File: " + m_repositoryName + " is locked. Try -Dignore-lock=true if you want to force uploading" );
+ throw new MojoFailureException( "fileLocked" );
+ }
+ }
+
+ // file is not locked, so we lock it now
+ try
+ {
+ remoteFile.put( lockFile, m_repositoryName + ".lock" );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+
+ try
+ {
+ repoDescriptorFile = remoteFile.get( m_repositoryName );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ // file doesn't exist! create a new one
+ getLog().warn( "file specified does not exist: " + m_repositoryName );
+ getLog().warn( "Create a new repository descriptor file " + m_repositoryName );
+ try
+ {
+ File f = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
+ repoDescriptorFile = new File( f.getParent() + File.separator
+ + String.valueOf( System.currentTimeMillis() ) + ".xml" );
+ }
+ catch ( IOException e1 )
+ {
+ getLog().error( "canno't create temporary file" );
+ e1.printStackTrace();
+ return;
+ }
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "IOException" );
+ }
+
+ Config userConfig = new Config();
+ userConfig.setPathRelative( true );
+ userConfig.setRemotely( true );
+
+ PathFile file = null;
+
+ // get the path to local maven repository
+ file = new PathFile( PathFile.uniformSeparator( m_settings.getLocalRepository() ) + File.separator
+ + PathFile.uniformSeparator( m_localRepo.pathOf( m_project.getArtifact() ) ) );
+ if ( file.isExists() )
+ {
+ m_fileInLocalRepo = file.getOnlyAbsoluteFilename();
+ }
+ else
+ {
+ getLog().error(
+ "file not found in local repository: " + m_settings.getLocalRepository() + File.separator
+ + m_localRepo.pathOf( m_project.getArtifact() ) );
+ return;
+ }
+
+ file = new PathFile( "file:/" + repoDescriptorFile.getAbsolutePath() );
+
+ ObrUpdate obrUpdate = new ObrUpdate( file, fileObrXml.getOnlyAbsoluteFilename(), m_project, m_fileInLocalRepo,
+ PathFile.uniformSeparator( m_settings.getLocalRepository() ), userConfig, getLog() );
+
+ obrUpdate.updateRepository();
+
+ // the reposiroty descriptor file is modified, we upload it on the remote repository
+ try
+ {
+ remoteFile.put( repoDescriptorFile, m_repositoryName );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ getLog().error( "Resource does not exist:" + repoDescriptorFile.getName() );
+ e.printStackTrace();
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+ repoDescriptorFile.delete();
+
+ // we remove lockFile activation
+ lockFile = null;
+ try
+ {
+ lockFile = File.createTempFile( String.valueOf( System.currentTimeMillis() ), null );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "IOException" );
+ }
+ try
+ {
+ remoteFile.put( lockFile, m_repositoryName + ".lock" );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().error( "Transfer failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "ResourceDoesNotExistException" );
+ }
+ catch ( AuthorizationException e )
+ {
+ getLog().error( "Authorization failed" );
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+ remoteFile.disconnect();
+ }
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrInstallFile.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrInstallFile.java
index 03b9e8b..1ef7a78 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrInstallFile.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrInstallFile.java
@@ -1,198 +1,198 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.File;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.settings.Settings;
-
-
-/**
- * construct the repository.xml from a compiled bundle.
- * @description construct the repository.xml from a compiled bundle.
- * @goal install-file
- * @requiresProject false
- * @phase install
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ObrInstallFile extends AbstractMojo
-{
- /**
- * The local Maven repository.
- *
- * @parameter expression="${localRepository}"
- * @required
- */
- private ArtifactRepository m_localRepo;
-
- /**
- * path to the repository.xml.
- *
- * @parameter expression="${repository-path}"
- * @require
- */
- private String m_repositoryPath;
-
- /**
- * setting of maven.
- *
- * @parameter expression="${settings}"
- * @require
- */
- private Settings m_settings;
-
- /**
- * Artifact Id.
- * @description symbolic name define by the user
- * @parameter expression="${artifactId}"
- */
- private String m_artifactId;
-
- /**
- * Group Id.
- * @description groupId define by the user
- * @parameter expression="${groupId}"
- */
- private String m_groupId;
-
- /**
- * Version.
- * @description version define by the user
- * @parameter expression="${version}"
- */
- private String m_version;
-
- /**
- * Packaging.
- * @description packaging define by the user
- * @parameter expression="${packaging}"
- */
- private String m_packaging;
-
- /**
- * OBR File.
- * @description obr file define by the user
- * @parameter expression="${obr-file}"
- */
- private String m_obrFile;
-
- /**
- * store user information in a project.
- */
- private MavenProject m_project;
-
-
- /**
- * main method for this goal.
- * @implements org.apache.maven.plugin.Mojo.execute
- * @throws MojoExecutionException if the plugin failed
- * @throws MojoFailureException if the plugin failed
- */
- public void execute() throws MojoExecutionException, MojoFailureException
- {
- getLog().info( "Install-File Obr starts:" );
-
- m_project = new MavenProject();
- m_project.setArtifactId( m_artifactId );
- m_project.setGroupId( m_groupId );
- m_project.setVersion( m_version );
- m_project.setPackaging( m_packaging );
-
- PathFile fileOut;
-
- if ( m_groupId == null )
- {
- getLog().error( "-DgroupId=VALUE is required" );
- return;
- }
- if ( m_artifactId == null )
- {
- getLog().error( "-Dartifactid=VALUE is required" );
- return;
- }
- if ( m_version == null )
- {
- getLog().error( "-Dversion=VALUE is required" );
- return;
- }
- if ( m_packaging == null )
- {
- getLog().error( "-Dpackaging=VALUE is required" );
- return;
- }
-
- // copy the file to the local repository
- PathFile repoLocal = new PathFile( m_localRepo.getBasedir() );
-
- // get the target file in mvn repo
- fileOut = new PathFile( PathFile.uniformSeparator( m_settings.getLocalRepository() ) + File.separator
- + m_groupId.replace( '.', File.separatorChar ) + File.separator + m_artifactId + File.separator + m_version
- + File.separator + m_artifactId + "-" + m_version + "." + m_packaging );
-
- if ( !fileOut.isExists() )
- {
- getLog().error( "file doesn't exist: " + fileOut.getAbsoluteFilename() );
- return;
- }
- else
- {
- getLog().info( "Target file: " + fileOut.getAbsoluteFilename() );
- }
-
- if ( m_repositoryPath == null )
- {
- m_repositoryPath = "file:" + repoLocal.getOnlyAbsoluteFilename() + "repository.xml";
- getLog().warn( "-DpathRepo is not define, use default repository: " + m_repositoryPath );
- }
-
- PathFile fileRepo = new PathFile( m_repositoryPath );
- if ( fileRepo.isRelative() )
- {
- fileRepo.setBaseDir( m_settings.getLocalRepository() );
- }
-
- // create the folder to the repository
- PathFile repoExist = new PathFile( fileRepo.getAbsolutePath() );
- if ( !repoExist.isExists() )
- {
- fileRepo.createPath();
- }
-
- PathFile fileObrXml = new PathFile( m_obrFile );
- if ( !fileObrXml.isExists() )
- {
- getLog().warn( "obr.xml file not found, use default" );
- }
-
- // build the user config
- Config userConfig = new Config();
-
- ObrUpdate obrUpdate = new ObrUpdate( fileRepo, fileObrXml.getOnlyAbsoluteFilename(), m_project, fileOut
- .getOnlyAbsoluteFilename(), m_localRepo.getBasedir(), userConfig, getLog() );
- obrUpdate.updateRepository();
-
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.File;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
+
+
+/**
+ * construct the repository.xml from a compiled bundle.
+ * @description construct the repository.xml from a compiled bundle.
+ * @goal install-file
+ * @requiresProject false
+ * @phase install
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class ObrInstallFile extends AbstractMojo
+{
+ /**
+ * The local Maven repository.
+ *
+ * @parameter expression="${localRepository}"
+ * @required
+ */
+ private ArtifactRepository m_localRepo;
+
+ /**
+ * path to the repository.xml.
+ *
+ * @parameter expression="${repository-path}"
+ * @require
+ */
+ private String m_repositoryPath;
+
+ /**
+ * setting of maven.
+ *
+ * @parameter expression="${settings}"
+ * @require
+ */
+ private Settings m_settings;
+
+ /**
+ * Artifact Id.
+ * @description symbolic name define by the user
+ * @parameter expression="${artifactId}"
+ */
+ private String m_artifactId;
+
+ /**
+ * Group Id.
+ * @description groupId define by the user
+ * @parameter expression="${groupId}"
+ */
+ private String m_groupId;
+
+ /**
+ * Version.
+ * @description version define by the user
+ * @parameter expression="${version}"
+ */
+ private String m_version;
+
+ /**
+ * Packaging.
+ * @description packaging define by the user
+ * @parameter expression="${packaging}"
+ */
+ private String m_packaging;
+
+ /**
+ * OBR File.
+ * @description obr file define by the user
+ * @parameter expression="${obr-file}"
+ */
+ private String m_obrFile;
+
+ /**
+ * store user information in a project.
+ */
+ private MavenProject m_project;
+
+
+ /**
+ * main method for this goal.
+ * @implements org.apache.maven.plugin.Mojo.execute
+ * @throws MojoExecutionException if the plugin failed
+ * @throws MojoFailureException if the plugin failed
+ */
+ public void execute() throws MojoExecutionException, MojoFailureException
+ {
+ getLog().info( "Install-File Obr starts:" );
+
+ m_project = new MavenProject();
+ m_project.setArtifactId( m_artifactId );
+ m_project.setGroupId( m_groupId );
+ m_project.setVersion( m_version );
+ m_project.setPackaging( m_packaging );
+
+ PathFile fileOut;
+
+ if ( m_groupId == null )
+ {
+ getLog().error( "-DgroupId=VALUE is required" );
+ return;
+ }
+ if ( m_artifactId == null )
+ {
+ getLog().error( "-Dartifactid=VALUE is required" );
+ return;
+ }
+ if ( m_version == null )
+ {
+ getLog().error( "-Dversion=VALUE is required" );
+ return;
+ }
+ if ( m_packaging == null )
+ {
+ getLog().error( "-Dpackaging=VALUE is required" );
+ return;
+ }
+
+ // copy the file to the local repository
+ PathFile repoLocal = new PathFile( m_localRepo.getBasedir() );
+
+ // get the target file in mvn repo
+ fileOut = new PathFile( PathFile.uniformSeparator( m_settings.getLocalRepository() ) + File.separator
+ + m_groupId.replace( '.', File.separatorChar ) + File.separator + m_artifactId + File.separator + m_version
+ + File.separator + m_artifactId + "-" + m_version + "." + m_packaging );
+
+ if ( !fileOut.isExists() )
+ {
+ getLog().error( "file doesn't exist: " + fileOut.getAbsoluteFilename() );
+ return;
+ }
+ else
+ {
+ getLog().info( "Target file: " + fileOut.getAbsoluteFilename() );
+ }
+
+ if ( m_repositoryPath == null )
+ {
+ m_repositoryPath = "file:" + repoLocal.getOnlyAbsoluteFilename() + "repository.xml";
+ getLog().warn( "-DpathRepo is not define, use default repository: " + m_repositoryPath );
+ }
+
+ PathFile fileRepo = new PathFile( m_repositoryPath );
+ if ( fileRepo.isRelative() )
+ {
+ fileRepo.setBaseDir( m_settings.getLocalRepository() );
+ }
+
+ // create the folder to the repository
+ PathFile repoExist = new PathFile( fileRepo.getAbsolutePath() );
+ if ( !repoExist.isExists() )
+ {
+ fileRepo.createPath();
+ }
+
+ PathFile fileObrXml = new PathFile( m_obrFile );
+ if ( !fileObrXml.isExists() )
+ {
+ getLog().warn( "obr.xml file not found, use default" );
+ }
+
+ // build the user config
+ Config userConfig = new Config();
+
+ ObrUpdate obrUpdate = new ObrUpdate( fileRepo, fileObrXml.getOnlyAbsoluteFilename(), m_project, fileOut
+ .getOnlyAbsoluteFilename(), m_localRepo.getBasedir(), userConfig, getLog() );
+ obrUpdate.updateRepository();
+
+ }
+
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrUpdate.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrUpdate.java
index 75d307b..c112cec 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrUpdate.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ObrUpdate.java
@@ -1,602 +1,602 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Properties;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.Result;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-
-/**
- * this class parse the old repository.xml file build the bundle resource description and update the repository.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-
-public class ObrUpdate
-{
- /**
- * generate the date format to insert it in repository descriptor file.
- */
- static SimpleDateFormat m_format = new SimpleDateFormat( "yyyyMMddHHmmss.SSS" );
-
- /**
- * logger for this plugin.
- */
- private Log m_logger;
-
- /**
- * name and path to the repository descriptor file.
- */
- private URI m_repoFilename;
-
- /**
- * name and path to the obr.xml file.
- */
- private String m_obrXml;
-
- /**
- * name and path to the bundle jar file.
- */
- private String m_outputFile;
-
- /**
- * maven project description.
- */
- private MavenProject m_project;
-
- /**
- * user configuration information.
- */
- private Config m_userConfig;
-
- /**
- * used to build another xml document.
- */
- private DocumentBuilder m_constructor;
-
- /**
- * root on parent document.
- */
- private Document m_repoDoc;
-
- /**
- * first Node on repository descriptor tree.
- */
- private Node m_root;
-
- /**
- * used to extract bindex bundle information.
- */
- private ExtractBindexInfo m_ebi;
-
- /**
- * used to store bundle information.
- */
- private ResourcesBundle m_resourceBundle;
-
- /**
- * pathfile to the repository descriptor file.
- */
- private PathFile m_repo;
-
-
- /**
- * initialize information.
- * @param repoFilename path to the repository descriptor file
- * @param obrXml path and filename to the obr.xml file
- * @param project maven project description
- * @param outputFile path to the bundle jar file
- * @param localRepo only path to the local repository
- * @param userConfig user information
- * @param log plugin logger
- */
- public ObrUpdate( PathFile repoFilename, String obrXml, MavenProject project, String outputFile, String localRepo,
- Config userConfig, Log log )
- {
- // this.m_localRepo = localRepo;
- this.m_outputFile = outputFile;
- this.m_repoFilename = repoFilename.getUri();
- this.m_obrXml = obrXml;
- this.m_project = project;
- this.m_logger = log;
-
- this.m_userConfig = userConfig;
-
- m_resourceBundle = new ResourcesBundle( log );
-
- if ( userConfig.isRemotely() )
- {
- this.m_repo = new PathFile( localRepo );
- }
- else
- {
- this.m_repo = repoFilename;
- }
- }
-
-
- /**
- * update the repository descriptor file. parse the old repository descriptor file, get the old reference of the bundle or determine the id for a new bundle, extract information from bindex set the new information in descriptor file and save it.
- * @throws MojoExecutionException if the plugin failed
- */
- public void updateRepository() throws MojoExecutionException
- {
-
- m_logger.debug( " (f) m_obrXml = " + m_obrXml );
- m_logger.debug( " (f) m_outputFile = " + m_outputFile );
- m_logger.debug( " (f) m_repoFilename = " + m_repoFilename );
-
- m_constructor = initConstructor();
-
- if ( m_constructor == null )
- {
- return;
- }
-
- // get the file size
- PathFile pf = new PathFile( m_outputFile );
- File fout = pf.getFile();
- pf.setBaseDir( m_repo.getOnlyAbsolutePath() );
- if ( fout.exists() )
- {
- m_resourceBundle.setSize( String.valueOf( fout.length() ) );
- if ( m_userConfig.isPathRelative() )
- {
- m_resourceBundle.setUri( pf.getOnlyRelativeFilename().replace( '\\', '/' ) );
- }
- else
- {
- m_resourceBundle.setUri( "file:" + m_outputFile );
- }
- }
- else
- {
- m_logger.error( "file doesn't exist: " + m_outputFile );
- return;
- }
-
- // parse repository
- if ( parseRepositoryXml() == -1 )
- {
- return;
- }
-
- // parse the obr.xml file
- if ( m_obrXml != null )
- {
- // URL url = getClass().getResource("/SchemaObr.xsd");
- // TODO validate obr.xml file
-
- Document obrXmlDoc = parseFile( m_obrXml, m_constructor );
- if ( obrXmlDoc == null )
- {
- return;
- }
- Node obrXmlRoot = ( Element ) obrXmlDoc.getDocumentElement();
- // sort the obr file
- sortObrXml( obrXmlRoot );
- }
-
- // use bindex to extract bundle information
- try
- {
- m_ebi = new ExtractBindexInfo( m_repoFilename, m_outputFile );
- }
- catch ( MojoExecutionException e )
- {
- m_logger.error( "unable to build Bindex informations" );
- e.printStackTrace();
- throw new MojoExecutionException( "MojoFailureException" );
- }
-
- m_resourceBundle.construct( m_project, m_ebi );
-
- if ( !walkOnTree( m_root ) )
- {
- // the correct resource node was not found, we must create it
- // we compute the new id
- String id = m_resourceBundle.getId();
- searchRepository( m_root, id );
- }
-
- // the repository.xml file have been modified, so we save it
- m_logger.info( "Writing OBR metadata" );
- writeToFile( m_repoFilename, m_root );
- }
-
-
- /**
- * init the document builder from xerces.
- * @return DocumentBuilder ready to create new document
- */
- private DocumentBuilder initConstructor()
- {
- DocumentBuilder constructor = null;
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- try
- {
- constructor = factory.newDocumentBuilder();
- }
- catch ( ParserConfigurationException e )
- {
- m_logger.error( "unable to create a new xml document" );
- e.printStackTrace();
- }
- return constructor;
-
- }
-
-
- /**
- * Parse the repository descriptor file.
- *
- * @return 0 if the bundle is already in the descriptor, else -1
- * @throws MojoExecutionException if the plugin failed
- */
- private int parseRepositoryXml() throws MojoExecutionException
- {
-
- File fout = new File( m_repoFilename );
- if ( !fout.exists() )
- {
- // create the repository.xml
- try
- {
- fout.createNewFile();
- m_logger.info( "Created " + fout.getAbsolutePath() );
- }
- catch ( IOException e )
- {
- m_logger.error( "Cannot create file " + fout.getAbsolutePath() );
- e.printStackTrace();
- return -1;
- }
-
- Document doc = m_constructor.newDocument();
- // create xml tree
- Date d = new Date();
- d.setTime( System.currentTimeMillis() );
- Element root = doc.createElement( "repository" );
- root.setAttribute( "lastmodified", m_format.format( d ) );
- root.setAttribute( "name", "MyRepository" );
- try
- {
- writeToFile( m_repoFilename, root );
- }
- catch ( MojoExecutionException e )
- {
- e.printStackTrace();
- throw new MojoExecutionException( "MojoExecutionException" );
- }
- }
-
- // now we parse the repository.xml file
- m_repoDoc = parseFile( fout.getAbsolutePath(), m_constructor );
- if ( m_repoDoc == null )
- {
- return -1;
- }
-
- m_root = ( Element ) m_repoDoc.getDocumentElement();
- return 0;
- }
-
-
- /**
- * transform a xml file to a xerces Document.
- * @param filename path to the xml file
- * @param constructor DocumentBuilder get from xerces
- * @return Document which describe this file
- */
- private Document parseFile( String filename, DocumentBuilder constructor )
- {
- if ( constructor == null )
- {
- return null;
- }
- // The document is the root of the DOM tree.
- m_logger.info( "Parsing " + filename );
- Document doc = null;
- try
- {
- doc = constructor.parse( new File( filename ) );
- }
- catch ( SAXException e )
- {
- e.printStackTrace();
- return null;
- }
- catch ( IOException e )
- {
- m_logger.error( "cannot open file: " + filename );
- e.printStackTrace();
- return null;
- }
- return doc;
- }
-
-
- /**
- * put the information from obr.xml into ressourceBundle object.
- * @param node Node to the OBR.xml file
- */
- private void sortObrXml( Node node )
- {
- if ( node.getNodeName().compareTo( "require" ) == 0 )
- {
- Require newRequireNode = new Require();
- NamedNodeMap list = node.getAttributes();
- try
- {
- newRequireNode.setExtend( list.getNamedItem( "extend" ).getNodeValue() );
- newRequireNode.setMultiple( list.getNamedItem( "multiple" ).getNodeValue() );
- newRequireNode.setOptional( list.getNamedItem( "optional" ).getNodeValue() );
- newRequireNode.setFilter( list.getNamedItem( "filter" ).getNodeValue() );
- newRequireNode.setName( list.getNamedItem( "name" ).getNodeValue() );
- }
- catch ( NullPointerException e )
- {
- m_logger
- .error( "the obr.xml file seems to be invalid in a \"require\" tag (one or more attributes are missing)" );
- // e.printStackTrace();
- }
- newRequireNode.setValue( XmlHelper.getTextContent( node ) );
- m_resourceBundle.addRequire( newRequireNode );
- }
- else if ( node.getNodeName().compareTo( "capability" ) == 0 )
- {
- Capability newCapability = new Capability();
- try
- {
- newCapability.setName( node.getAttributes().getNamedItem( "name" ).getNodeValue() );
- }
- catch ( NullPointerException e )
- {
- m_logger.error( "attribute \"name\" is missing in obr.xml in a \"capability\" tag" );
- e.printStackTrace();
- }
- NodeList list = node.getChildNodes();
- for ( int i = 0; i < list.getLength(); i++ )
- {
- PElement p = new PElement();
- Node n = list.item( i );
- Node item = null;
- // System.err.println(n.getNodeName());
- if ( n.getNodeName().compareTo( "p" ) == 0 )
- {
-
- p.setN( n.getAttributes().getNamedItem( "n" ).getNodeValue() );
- item = n.getAttributes().getNamedItem( "t" );
- if ( item != null )
- {
- p.setT( item.getNodeValue() );
- }
- item = n.getAttributes().getNamedItem( "v" );
- if ( item != null )
- {
- p.setV( item.getNodeValue() );
- }
-
- newCapability.addP( p );
- }
- }
- m_resourceBundle.addCapability( newCapability );
- }
- else if ( node.getNodeName().compareTo( "category" ) == 0 )
- {
- Category newCategory = new Category();
- newCategory.setId( node.getAttributes().getNamedItem( "id" ).getNodeValue() );
- m_resourceBundle.addCategory( newCategory );
- }
- else
- {
- NodeList list = node.getChildNodes();
- for ( int i = 0; i < list.getLength(); i++ )
- {
- sortObrXml( list.item( i ) );
- }
- }
- }
-
-
- /**
- * write a Node in a xml file.
- * @param outputFilename URI to the output file
- * @param treeToBeWrite Node root of the tree to be write in file
- * @throws MojoExecutionException if the plugin failed
- */
- private void writeToFile( URI outputFilename, Node treeToBeWrite ) throws MojoExecutionException
- {
- // init the transformer
- Transformer transformer = null;
- TransformerFactory tfabrique = TransformerFactory.newInstance();
- try
- {
- transformer = tfabrique.newTransformer();
- }
- catch ( TransformerConfigurationException e )
- {
- m_logger.error( "Unable to write to file: " + outputFilename.toString() );
- e.printStackTrace();
- throw new MojoExecutionException( "TransformerConfigurationException" );
- }
- Properties proprietes = new Properties();
- proprietes.put( "method", "xml" );
- proprietes.put( "version", "1.0" );
- proprietes.put( "encoding", "ISO-8859-1" );
- proprietes.put( "standalone", "yes" );
- proprietes.put( "indent", "yes" );
- proprietes.put( "omit-xml-declaration", "no" );
- transformer.setOutputProperties( proprietes );
-
- DOMSource input = new DOMSource( treeToBeWrite );
-
- File fichier = new File( outputFilename );
- FileOutputStream flux = null;
- try
- {
- flux = new FileOutputStream( fichier );
- }
- catch ( FileNotFoundException e )
- {
- m_logger.error( "Unable to write to file: " + fichier.getName() );
- e.printStackTrace();
- throw new MojoExecutionException( "FileNotFoundException" );
- }
- Result output = new StreamResult( flux );
- try
- {
- transformer.transform( input, output );
- }
- catch ( TransformerException e )
- {
- e.printStackTrace();
- throw new MojoExecutionException( "TransformerException" );
- }
-
- try
- {
- flux.flush();
- flux.close();
- }
- catch ( IOException e )
- {
- e.printStackTrace();
- throw new MojoExecutionException( "IOException" );
- }
-
- }
-
-
- /**
- * walk on the tree until the targeted node was found.
- * @param node targeted node
- * @return true if the requiered node was found else false.
- */
- private boolean walkOnTree( Node node )
- {
-
- if ( node.getNodeName().compareTo( "resource" ) == 0 )
- {
- return resource( node );
- }
- else
- { // look at the repository node (first in the file)
- if ( node.getNodeName().compareTo( "repository" ) == 0 )
- {
- Date d = new Date();
- d.setTime( System.currentTimeMillis() );
- NamedNodeMap nList = node.getAttributes();
- Node n = nList.getNamedItem( "lastmodified" );
- n.setNodeValue( m_format.format( d ) );
- }
- NodeList list = node.getChildNodes();
- if ( list.getLength() > 0 )
- {
- for ( int i = 0; i < list.getLength(); i++ )
- {
- if ( walkOnTree( list.item( i ) ) )
- {
- return true;
- }
- }
- }
- return false;
- }
-
- }
-
-
- /**
- * put the resource bundle in the tree.
- * @param node Node on the xml file
- * @param id id of the bundle ressource
- */
- private void searchRepository( Node node, String id )
- {
- if ( node.getNodeName().compareTo( "repository" ) == 0 )
- {
- node.appendChild( m_resourceBundle.getNode( m_repoDoc ) );
- return;
- }
- else
- {
- System.out.println( "Second branch..." );
- NodeList list = node.getChildNodes();
- if ( list.getLength() > 0 )
- {
- for ( int i = 0; i < list.getLength(); i++ )
- {
- searchRepository( list.item( i ), id );
- }
- }
- }
-
- }
-
-
- /**
- * compare two node and update the array which compute the smallest free id.
- * @param node : node
- * @return true if the node is the same bundle than the ressourceBundle, else false.
- */
- private boolean resource( Node node )
- {
-
- // this part save all the id free if we need to add resource
- String id = node.getAttributes().getNamedItem( "id" ).getNodeValue();
- NamedNodeMap map = node.getAttributes();
-
- if ( m_resourceBundle.isSameBundleResource( map.getNamedItem( "symbolicname" ).getNodeValue(), map
- .getNamedItem( "version" ).getNodeValue() ) )
- {
- m_resourceBundle.setId( String.valueOf( id ) );
- node.getParentNode().replaceChild( m_resourceBundle.getNode( m_repoDoc ), node );
- return true;
- }
- return false;
- }
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Result;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+
+/**
+ * this class parse the old repository.xml file build the bundle resource description and update the repository.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+
+public class ObrUpdate
+{
+ /**
+ * generate the date format to insert it in repository descriptor file.
+ */
+ static SimpleDateFormat m_format = new SimpleDateFormat( "yyyyMMddHHmmss.SSS" );
+
+ /**
+ * logger for this plugin.
+ */
+ private Log m_logger;
+
+ /**
+ * name and path to the repository descriptor file.
+ */
+ private URI m_repoFilename;
+
+ /**
+ * name and path to the obr.xml file.
+ */
+ private String m_obrXml;
+
+ /**
+ * name and path to the bundle jar file.
+ */
+ private String m_outputFile;
+
+ /**
+ * maven project description.
+ */
+ private MavenProject m_project;
+
+ /**
+ * user configuration information.
+ */
+ private Config m_userConfig;
+
+ /**
+ * used to build another xml document.
+ */
+ private DocumentBuilder m_constructor;
+
+ /**
+ * root on parent document.
+ */
+ private Document m_repoDoc;
+
+ /**
+ * first Node on repository descriptor tree.
+ */
+ private Node m_root;
+
+ /**
+ * used to extract bindex bundle information.
+ */
+ private ExtractBindexInfo m_ebi;
+
+ /**
+ * used to store bundle information.
+ */
+ private ResourcesBundle m_resourceBundle;
+
+ /**
+ * pathfile to the repository descriptor file.
+ */
+ private PathFile m_repo;
+
+
+ /**
+ * initialize information.
+ * @param repoFilename path to the repository descriptor file
+ * @param obrXml path and filename to the obr.xml file
+ * @param project maven project description
+ * @param outputFile path to the bundle jar file
+ * @param localRepo only path to the local repository
+ * @param userConfig user information
+ * @param log plugin logger
+ */
+ public ObrUpdate( PathFile repoFilename, String obrXml, MavenProject project, String outputFile, String localRepo,
+ Config userConfig, Log log )
+ {
+ // this.m_localRepo = localRepo;
+ this.m_outputFile = outputFile;
+ this.m_repoFilename = repoFilename.getUri();
+ this.m_obrXml = obrXml;
+ this.m_project = project;
+ this.m_logger = log;
+
+ this.m_userConfig = userConfig;
+
+ m_resourceBundle = new ResourcesBundle( log );
+
+ if ( userConfig.isRemotely() )
+ {
+ this.m_repo = new PathFile( localRepo );
+ }
+ else
+ {
+ this.m_repo = repoFilename;
+ }
+ }
+
+
+ /**
+ * update the repository descriptor file. parse the old repository descriptor file, get the old reference of the bundle or determine the id for a new bundle, extract information from bindex set the new information in descriptor file and save it.
+ * @throws MojoExecutionException if the plugin failed
+ */
+ public void updateRepository() throws MojoExecutionException
+ {
+
+ m_logger.debug( " (f) m_obrXml = " + m_obrXml );
+ m_logger.debug( " (f) m_outputFile = " + m_outputFile );
+ m_logger.debug( " (f) m_repoFilename = " + m_repoFilename );
+
+ m_constructor = initConstructor();
+
+ if ( m_constructor == null )
+ {
+ return;
+ }
+
+ // get the file size
+ PathFile pf = new PathFile( m_outputFile );
+ File fout = pf.getFile();
+ pf.setBaseDir( m_repo.getOnlyAbsolutePath() );
+ if ( fout.exists() )
+ {
+ m_resourceBundle.setSize( String.valueOf( fout.length() ) );
+ if ( m_userConfig.isPathRelative() )
+ {
+ m_resourceBundle.setUri( pf.getOnlyRelativeFilename().replace( '\\', '/' ) );
+ }
+ else
+ {
+ m_resourceBundle.setUri( "file:" + m_outputFile );
+ }
+ }
+ else
+ {
+ m_logger.error( "file doesn't exist: " + m_outputFile );
+ return;
+ }
+
+ // parse repository
+ if ( parseRepositoryXml() == -1 )
+ {
+ return;
+ }
+
+ // parse the obr.xml file
+ if ( m_obrXml != null )
+ {
+ // URL url = getClass().getResource("/SchemaObr.xsd");
+ // TODO validate obr.xml file
+
+ Document obrXmlDoc = parseFile( m_obrXml, m_constructor );
+ if ( obrXmlDoc == null )
+ {
+ return;
+ }
+ Node obrXmlRoot = ( Element ) obrXmlDoc.getDocumentElement();
+ // sort the obr file
+ sortObrXml( obrXmlRoot );
+ }
+
+ // use bindex to extract bundle information
+ try
+ {
+ m_ebi = new ExtractBindexInfo( m_repoFilename, m_outputFile );
+ }
+ catch ( MojoExecutionException e )
+ {
+ m_logger.error( "unable to build Bindex informations" );
+ e.printStackTrace();
+ throw new MojoExecutionException( "MojoFailureException" );
+ }
+
+ m_resourceBundle.construct( m_project, m_ebi );
+
+ if ( !walkOnTree( m_root ) )
+ {
+ // the correct resource node was not found, we must create it
+ // we compute the new id
+ String id = m_resourceBundle.getId();
+ searchRepository( m_root, id );
+ }
+
+ // the repository.xml file have been modified, so we save it
+ m_logger.info( "Writing OBR metadata" );
+ writeToFile( m_repoFilename, m_root );
+ }
+
+
+ /**
+ * init the document builder from xerces.
+ * @return DocumentBuilder ready to create new document
+ */
+ private DocumentBuilder initConstructor()
+ {
+ DocumentBuilder constructor = null;
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ try
+ {
+ constructor = factory.newDocumentBuilder();
+ }
+ catch ( ParserConfigurationException e )
+ {
+ m_logger.error( "unable to create a new xml document" );
+ e.printStackTrace();
+ }
+ return constructor;
+
+ }
+
+
+ /**
+ * Parse the repository descriptor file.
+ *
+ * @return 0 if the bundle is already in the descriptor, else -1
+ * @throws MojoExecutionException if the plugin failed
+ */
+ private int parseRepositoryXml() throws MojoExecutionException
+ {
+
+ File fout = new File( m_repoFilename );
+ if ( !fout.exists() )
+ {
+ // create the repository.xml
+ try
+ {
+ fout.createNewFile();
+ m_logger.info( "Created " + fout.getAbsolutePath() );
+ }
+ catch ( IOException e )
+ {
+ m_logger.error( "Cannot create file " + fout.getAbsolutePath() );
+ e.printStackTrace();
+ return -1;
+ }
+
+ Document doc = m_constructor.newDocument();
+ // create xml tree
+ Date d = new Date();
+ d.setTime( System.currentTimeMillis() );
+ Element root = doc.createElement( "repository" );
+ root.setAttribute( "lastmodified", m_format.format( d ) );
+ root.setAttribute( "name", "MyRepository" );
+ try
+ {
+ writeToFile( m_repoFilename, root );
+ }
+ catch ( MojoExecutionException e )
+ {
+ e.printStackTrace();
+ throw new MojoExecutionException( "MojoExecutionException" );
+ }
+ }
+
+ // now we parse the repository.xml file
+ m_repoDoc = parseFile( fout.getAbsolutePath(), m_constructor );
+ if ( m_repoDoc == null )
+ {
+ return -1;
+ }
+
+ m_root = ( Element ) m_repoDoc.getDocumentElement();
+ return 0;
+ }
+
+
+ /**
+ * transform a xml file to a xerces Document.
+ * @param filename path to the xml file
+ * @param constructor DocumentBuilder get from xerces
+ * @return Document which describe this file
+ */
+ private Document parseFile( String filename, DocumentBuilder constructor )
+ {
+ if ( constructor == null )
+ {
+ return null;
+ }
+ // The document is the root of the DOM tree.
+ m_logger.info( "Parsing " + filename );
+ Document doc = null;
+ try
+ {
+ doc = constructor.parse( new File( filename ) );
+ }
+ catch ( SAXException e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+ catch ( IOException e )
+ {
+ m_logger.error( "cannot open file: " + filename );
+ e.printStackTrace();
+ return null;
+ }
+ return doc;
+ }
+
+
+ /**
+ * put the information from obr.xml into ressourceBundle object.
+ * @param node Node to the OBR.xml file
+ */
+ private void sortObrXml( Node node )
+ {
+ if ( node.getNodeName().compareTo( "require" ) == 0 )
+ {
+ Require newRequireNode = new Require();
+ NamedNodeMap list = node.getAttributes();
+ try
+ {
+ newRequireNode.setExtend( list.getNamedItem( "extend" ).getNodeValue() );
+ newRequireNode.setMultiple( list.getNamedItem( "multiple" ).getNodeValue() );
+ newRequireNode.setOptional( list.getNamedItem( "optional" ).getNodeValue() );
+ newRequireNode.setFilter( list.getNamedItem( "filter" ).getNodeValue() );
+ newRequireNode.setName( list.getNamedItem( "name" ).getNodeValue() );
+ }
+ catch ( NullPointerException e )
+ {
+ m_logger
+ .error( "the obr.xml file seems to be invalid in a \"require\" tag (one or more attributes are missing)" );
+ // e.printStackTrace();
+ }
+ newRequireNode.setValue( XmlHelper.getTextContent( node ) );
+ m_resourceBundle.addRequire( newRequireNode );
+ }
+ else if ( node.getNodeName().compareTo( "capability" ) == 0 )
+ {
+ Capability newCapability = new Capability();
+ try
+ {
+ newCapability.setName( node.getAttributes().getNamedItem( "name" ).getNodeValue() );
+ }
+ catch ( NullPointerException e )
+ {
+ m_logger.error( "attribute \"name\" is missing in obr.xml in a \"capability\" tag" );
+ e.printStackTrace();
+ }
+ NodeList list = node.getChildNodes();
+ for ( int i = 0; i < list.getLength(); i++ )
+ {
+ PElement p = new PElement();
+ Node n = list.item( i );
+ Node item = null;
+ // System.err.println(n.getNodeName());
+ if ( n.getNodeName().compareTo( "p" ) == 0 )
+ {
+
+ p.setN( n.getAttributes().getNamedItem( "n" ).getNodeValue() );
+ item = n.getAttributes().getNamedItem( "t" );
+ if ( item != null )
+ {
+ p.setT( item.getNodeValue() );
+ }
+ item = n.getAttributes().getNamedItem( "v" );
+ if ( item != null )
+ {
+ p.setV( item.getNodeValue() );
+ }
+
+ newCapability.addP( p );
+ }
+ }
+ m_resourceBundle.addCapability( newCapability );
+ }
+ else if ( node.getNodeName().compareTo( "category" ) == 0 )
+ {
+ Category newCategory = new Category();
+ newCategory.setId( node.getAttributes().getNamedItem( "id" ).getNodeValue() );
+ m_resourceBundle.addCategory( newCategory );
+ }
+ else
+ {
+ NodeList list = node.getChildNodes();
+ for ( int i = 0; i < list.getLength(); i++ )
+ {
+ sortObrXml( list.item( i ) );
+ }
+ }
+ }
+
+
+ /**
+ * write a Node in a xml file.
+ * @param outputFilename URI to the output file
+ * @param treeToBeWrite Node root of the tree to be write in file
+ * @throws MojoExecutionException if the plugin failed
+ */
+ private void writeToFile( URI outputFilename, Node treeToBeWrite ) throws MojoExecutionException
+ {
+ // init the transformer
+ Transformer transformer = null;
+ TransformerFactory tfabrique = TransformerFactory.newInstance();
+ try
+ {
+ transformer = tfabrique.newTransformer();
+ }
+ catch ( TransformerConfigurationException e )
+ {
+ m_logger.error( "Unable to write to file: " + outputFilename.toString() );
+ e.printStackTrace();
+ throw new MojoExecutionException( "TransformerConfigurationException" );
+ }
+ Properties proprietes = new Properties();
+ proprietes.put( "method", "xml" );
+ proprietes.put( "version", "1.0" );
+ proprietes.put( "encoding", "ISO-8859-1" );
+ proprietes.put( "standalone", "yes" );
+ proprietes.put( "indent", "yes" );
+ proprietes.put( "omit-xml-declaration", "no" );
+ transformer.setOutputProperties( proprietes );
+
+ DOMSource input = new DOMSource( treeToBeWrite );
+
+ File fichier = new File( outputFilename );
+ FileOutputStream flux = null;
+ try
+ {
+ flux = new FileOutputStream( fichier );
+ }
+ catch ( FileNotFoundException e )
+ {
+ m_logger.error( "Unable to write to file: " + fichier.getName() );
+ e.printStackTrace();
+ throw new MojoExecutionException( "FileNotFoundException" );
+ }
+ Result output = new StreamResult( flux );
+ try
+ {
+ transformer.transform( input, output );
+ }
+ catch ( TransformerException e )
+ {
+ e.printStackTrace();
+ throw new MojoExecutionException( "TransformerException" );
+ }
+
+ try
+ {
+ flux.flush();
+ flux.close();
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ throw new MojoExecutionException( "IOException" );
+ }
+
+ }
+
+
+ /**
+ * walk on the tree until the targeted node was found.
+ * @param node targeted node
+ * @return true if the requiered node was found else false.
+ */
+ private boolean walkOnTree( Node node )
+ {
+
+ if ( node.getNodeName().compareTo( "resource" ) == 0 )
+ {
+ return resource( node );
+ }
+ else
+ { // look at the repository node (first in the file)
+ if ( node.getNodeName().compareTo( "repository" ) == 0 )
+ {
+ Date d = new Date();
+ d.setTime( System.currentTimeMillis() );
+ NamedNodeMap nList = node.getAttributes();
+ Node n = nList.getNamedItem( "lastmodified" );
+ n.setNodeValue( m_format.format( d ) );
+ }
+ NodeList list = node.getChildNodes();
+ if ( list.getLength() > 0 )
+ {
+ for ( int i = 0; i < list.getLength(); i++ )
+ {
+ if ( walkOnTree( list.item( i ) ) )
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ }
+
+
+ /**
+ * put the resource bundle in the tree.
+ * @param node Node on the xml file
+ * @param id id of the bundle ressource
+ */
+ private void searchRepository( Node node, String id )
+ {
+ if ( node.getNodeName().compareTo( "repository" ) == 0 )
+ {
+ node.appendChild( m_resourceBundle.getNode( m_repoDoc ) );
+ return;
+ }
+ else
+ {
+ System.out.println( "Second branch..." );
+ NodeList list = node.getChildNodes();
+ if ( list.getLength() > 0 )
+ {
+ for ( int i = 0; i < list.getLength(); i++ )
+ {
+ searchRepository( list.item( i ), id );
+ }
+ }
+ }
+
+ }
+
+
+ /**
+ * compare two node and update the array which compute the smallest free id.
+ * @param node : node
+ * @return true if the node is the same bundle than the ressourceBundle, else false.
+ */
+ private boolean resource( Node node )
+ {
+
+ // this part save all the id free if we need to add resource
+ String id = node.getAttributes().getNamedItem( "id" ).getNodeValue();
+ NamedNodeMap map = node.getAttributes();
+
+ if ( m_resourceBundle.isSameBundleResource( map.getNamedItem( "symbolicname" ).getNodeValue(), map
+ .getNamedItem( "version" ).getNodeValue() ) )
+ {
+ m_resourceBundle.setId( String.valueOf( id ) );
+ node.getParentNode().replaceChild( m_resourceBundle.getNode( m_repoDoc ), node );
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PElement.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PElement.java
index 8a51bd8..cdc21e9 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PElement.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PElement.java
@@ -1,131 +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.felix.obr.plugin;
-
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-
-/**
- * this class describe the p element in a capability tag.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- *
- */
-public class PElement
-{
- /**
- * store the v tag (value).
- */
- private String m_v;
-
- /**
- * store the t tag (type).
- */
- private String m_t;
-
- /**
- * store the n tag (name).
- */
- private String m_n;
-
-
- /**
- * get the n tag.
- * @return attribute n
- */
- public String getN()
- {
- return m_n;
- }
-
-
- /**
- * set the n tage.
- * @param n new value
- */
- public void setN( String n )
- {
- this.m_n = n;
- }
-
-
- /**
- * get the t tag.
- * @return attribute t
- */
- public String getT()
- {
- return m_t;
- }
-
-
- /**
- * set the t tag.
- * @param t new value
- */
- public void setT( String t )
- {
- this.m_t = t;
- }
-
-
- /**
- * get the v tag.
- * @return attribute v
- */
- public String getV()
- {
- return m_v;
- }
-
-
- /**
- * set the v tag.
- * @param v new value
- */
- public void setV( String v )
- {
- this.m_v = v;
- }
-
-
- /**
- * transform this object to node.
- * @param father father document for create Node
- * @return node
- */
- public Node getNode( Document father )
- {
- Element p = father.createElement( "p" );
- p.setAttribute( "n", this.getN() );
- if ( this.getT() != null )
- {
- p.setAttribute( "t", this.getT() );
- }
-
- if ( this.getV() != null )
- {
- p.setAttribute( "v", this.getV() );
- }
-
- return p;
- }
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * this class describe the p element in a capability tag.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ *
+ */
+public class PElement
+{
+ /**
+ * store the v tag (value).
+ */
+ private String m_v;
+
+ /**
+ * store the t tag (type).
+ */
+ private String m_t;
+
+ /**
+ * store the n tag (name).
+ */
+ private String m_n;
+
+
+ /**
+ * get the n tag.
+ * @return attribute n
+ */
+ public String getN()
+ {
+ return m_n;
+ }
+
+
+ /**
+ * set the n tage.
+ * @param n new value
+ */
+ public void setN( String n )
+ {
+ this.m_n = n;
+ }
+
+
+ /**
+ * get the t tag.
+ * @return attribute t
+ */
+ public String getT()
+ {
+ return m_t;
+ }
+
+
+ /**
+ * set the t tag.
+ * @param t new value
+ */
+ public void setT( String t )
+ {
+ this.m_t = t;
+ }
+
+
+ /**
+ * get the v tag.
+ * @return attribute v
+ */
+ public String getV()
+ {
+ return m_v;
+ }
+
+
+ /**
+ * set the v tag.
+ * @param v new value
+ */
+ public void setV( String v )
+ {
+ this.m_v = v;
+ }
+
+
+ /**
+ * transform this object to node.
+ * @param father father document for create Node
+ * @return node
+ */
+ public Node getNode( Document father )
+ {
+ Element p = father.createElement( "p" );
+ p.setAttribute( "n", this.getN() );
+ if ( this.getT() != null )
+ {
+ p.setAttribute( "t", this.getT() );
+ }
+
+ if ( this.getV() != null )
+ {
+ p.setAttribute( "v", this.getV() );
+ }
+
+ return p;
+ }
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PathFile.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PathFile.java
index bd9e693..71c19d3 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PathFile.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/PathFile.java
@@ -1,739 +1,739 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.channels.FileChannel;
-
-
-/**
- * this class provide some functions to simplify file manipulation.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class PathFile
-{
-
- /**
- * full filename.
- */
- private String m_fullFilename;
-
- /**
- * store only the filename of the file.
- */
- private String m_fileName;
-
- /**
- * store only the path of this file.
- */
- private String m_pathFile;
-
- /**
- * store the base Directory in case of relative path.
- */
- private String m_baseDir;
-
- /**
- * store the protocol used (ie:file, http...).
- */
- private String m_protocol;
-
- /**
- * if the path is relative or absolute.
- */
- private boolean m_relative;
-
- /**
- * if this file is a folder.
- */
- private boolean m_folder;
-
- /**
- * if the file exist or not.
- */
- private boolean m_exist;
-
- /**
- * if this file is a file (not a folder).
- */
- private boolean m_file;
-
- /**
- * if this filename is valid or incomplete.
- */
- private boolean m_valid;
-
-
- /**
- * build all the attribute information.
- * @param filename path to the file
- */
- public PathFile( String filename )
- {
-
- this.m_fullFilename = filename;
- if ( filename == null )
- {
- this.m_valid = false;
- return;
- }
- this.m_valid = true;
- m_protocol = extractProtocol( filename );
- m_pathFile = extractPathFile( filename );
- if ( m_pathFile.startsWith( "//" ) )
- {
- // avoid problems on Unix like system
- m_pathFile = m_pathFile.substring( 1 );
- }
- m_fileName = extractFileName( filename );
- m_relative = extractRelative();
- if ( !m_relative && ( getProtocol().compareTo( "file" ) == 0 || getProtocol().compareTo( "" ) == 0 ) )
- {
- File f = new File( getOnlyAbsoluteFilename() );
- m_file = f.isFile();
- m_folder = f.isDirectory();
- m_exist = f.exists();
- if ( m_folder )
- {
- m_pathFile = m_pathFile + m_fileName + File.separator;
- m_fileName = "";
- }
- }
- if ( m_exist )
- {
- m_protocol = "file";
- }
- else
- {
- if ( m_fileName.compareTo( "" ) == 0 )
- {
- m_folder = true;
- m_file = false;
- }
- else
- {
- m_folder = false;
- m_file = true;
- }
-
- }
-
- // add the '/' before the complete path if it is absolute path
- if ( !this.isRelative() && !m_pathFile.startsWith( "/" ) )
- {
- m_pathFile = "/".concat( m_pathFile );
- }
-
- }
-
-
- /**
- * get if the filename is relative or absolute.
- * @return true if the path is relative, else false
- */
- private boolean extractRelative()
- {
- if ( m_pathFile.startsWith( "." + File.separator, 1 ) || m_pathFile.startsWith( ".." + File.separator, 1 ) )
- {
- m_pathFile = m_pathFile.substring( 1 );
- m_valid = false;
- return true;
- }
-
- return false;
- }
-
-
- /**
- * get only the name from the filename.
- * @param fullFilename full filename
- * @return the name of the file or folder
- */
- private String extractFileName( String fullFilename )
- {
- int index = fullFilename.lastIndexOf( '/' ); // Given path
- return fullFilename.substring( index + 1, fullFilename.length() );
- }
-
-
- /**
- * get the path from the filename.
- * @param fullFilename full filename
- * @return the path of the file
- */
- private String extractPathFile( String fullFilename )
- {
- String substring;
- if ( extractFileName( fullFilename ).compareTo( "" ) == 0 )
- {
- // it is a folder
- substring = fullFilename;
- }
- else
- {
- substring = fullFilename.substring( 0, fullFilename.indexOf( extractFileName( fullFilename ) ) );
- }
-
- if ( getProtocol().compareTo( "" ) != 0 )
- {
- substring = substring.substring( 5 );
- }
-
- return substring;
- }
-
-
- /**
- * determine which protocol is used.
- * @param filename the full fileneme
- * @return "file" or "http" or ""
- */
- private String extractProtocol( String filename )
- {
- if ( filename.startsWith( "file:" ) )
- {
- return "file";
- }
- if ( filename.startsWith( "http:" ) )
- {
- return "http";
- }
- return "";
- }
-
-
- /**
- * set the base directory.
- * @param baseDir new value for the base directory
- */
- public void setBaseDir( String baseDir )
- {
- this.m_baseDir = baseDir;
- if ( isRelative() && this.m_fullFilename != null )
- {
- this.m_valid = true;
- if ( getProtocol().compareTo( "file" ) == 0 || getProtocol().compareTo( "" ) == 0 )
- {
- File f = new File( getOnlyAbsoluteFilename() );
- m_file = f.isFile();
- m_folder = f.isDirectory();
- m_exist = f.exists();
- }
- if ( m_exist )
- {
- m_protocol = "file";
- }
- }
-
- }
-
-
- /**
- * get the base directory.
- * @return base directory
- */
- public String getBaseDir()
- {
- return this.m_baseDir;
- }
-
-
- public boolean isValid()
- {
- return m_valid;
- }
-
-
- public boolean isRelative()
- {
- return m_relative;
- }
-
-
- public boolean isExists()
- {
- return m_exist;
- }
-
-
- public boolean isFile()
- {
- return m_file;
- }
-
-
- public boolean isFolder()
- {
- return m_folder;
- }
-
-
- /**
- * get a File which points on the same file.
- * @return a File object
- */
- public File getFile()
- {
- if ( !this.isValid() )
- {
- return null;
- }
- String path = PathFile.uniformSeparator( this.getOnlyAbsoluteFilename() );
- if ( File.separatorChar == '\\' )
- {
- path = path.replace( '\\', '/' );
- }
- File f = new File( path );
- return f;
- }
-
-
- /**
- * get an URI which points on the same file.
- * @return an URI object
- */
- public URI getUri()
- {
- if ( !this.isValid() )
- {
- return null;
- }
- String path = PathFile.uniformSeparator( getAbsoluteFilename() );
- if ( File.separatorChar == '\\' )
- {
- path = path.replace( '\\', '/' );
- }
-
- path = path.replaceAll( " ", "%20" );
-
- URI uri = null;
- try
- {
- uri = new URI( path );
- }
- catch ( URISyntaxException e )
- {
- System.err.println( "Malformed URI: " + path );
- System.err.println( e.getMessage() );
- return null;
- }
- return uri;
- }
-
-
- /**
- * get protocol + relative path of this file.
- * @return the relative path or null if it is not valid
- */
- public String getRelativePath()
- {
- if ( !this.isValid() )
- {
- return null;
- }
-
- return getProtocol() + ":/" + getOnlyRelativePath();
- }
-
-
- /**
- * get only (without protocol) relative path of this file.
- * @return the relative path or null if it is not valid
- */
- public String getOnlyRelativePath()
- {
- if ( !this.isValid() )
- {
- return null;
- }
- if ( this.isRelative() )
- {
- return m_pathFile;
-
- }
- else
- {
- if ( m_baseDir != null )
- {
- // System.err.println(m_pathFile);
- // System.err.println(m_baseDir);
- if ( m_pathFile.startsWith( m_baseDir ) )
- {
- /*
- * String ch1 = m_pathFile; String ch2 = m_baseDir; System.err.println(ch1); System.err.println(ch2); System.err.println("."+File.separator+ch1.substring(ch2.length()));
- */
- return "." + File.separator + m_pathFile.substring( m_baseDir.length() );
- }
- }
- return m_pathFile;
- }
- }
-
-
- /**
- * calcul absolute path from relative path.
- * @param baseDir base directory
- * @param path path to convert
- * @return the absolute path or null
- */
- private String calculAbsolutePath( String baseDir, String path )
- {
- if ( path.startsWith( ".." + File.separatorChar ) )
- {
- String base = baseDir;
- int lastIndex;
- lastIndex = base.lastIndexOf( File.separator );
- if ( lastIndex == base.length() )
- {
- base = base.substring( 0, base.length() - 1 );
- lastIndex = base.lastIndexOf( File.separator );
- }
- if ( lastIndex < base.length() )
- {
- return calculAbsolutePath( base.substring( 0, lastIndex + 1 ), path.substring( 3 ) );
- }
- else
- {
- return null;
- }
- }
- else if ( path.startsWith( "." + File.separatorChar ) )
- {
- String res;
- if ( File.separatorChar == '\\' )
- {
- res = path.replaceFirst( ".", baseDir.replace( '\\', '/' ) );
- }
- else
- {
- res = path.replaceFirst( ".", baseDir );
- }
-
- return PathFile.uniformSeparator( res );
- }
- else
- {
- return PathFile.uniformSeparator( baseDir + path );
- }
- }
-
-
- /**
- * get only (without protocol) absolute path (without filename).
- * @return absolute path
- */
- public String getOnlyAbsolutePath()
- {
- if ( !this.isValid() )
- {
- return null;
- }
- if ( isRelative() )
- {
- return calculAbsolutePath( m_baseDir, m_pathFile );
- }
- else
- {
- return m_pathFile;
- }
- }
-
-
- /**
- * get protocol + absolute path (without filename).
- * @return absolute path
- */
- public String getAbsolutePath()
- {
-
- if ( isRelative() )
- {
- return getProtocol() + ":/" + calculAbsolutePath( m_baseDir, m_pathFile );
- }
- else
- {
- if ( getProtocol().compareTo( "" ) == 0 || m_pathFile == null )
- {
- return m_pathFile;
- }
- else
- {
- return getProtocol() + ":" + m_pathFile;
- }
- }
- }
-
-
- /**
- * get only (without protocol) absolute path + filename.
- * @return absolute filename
- */
- public String getOnlyAbsoluteFilename()
- {
- if ( getOnlyAbsolutePath() != null && getFilename() != null )
- {
- return getOnlyAbsolutePath() + getFilename();
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * get protocol + absolute path + filename.
- * @return absolute filenama
- */
- public String getAbsoluteFilename()
- {
- if ( getAbsolutePath() != null && getFilename() != null )
- {
- return getAbsolutePath() + getFilename();
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * get only (without protocol) relative path + filename.
- * @return relative filename
- */
- public String getOnlyRelativeFilename()
- {
- if ( !this.isValid() )
- {
- return "";
- }
-
- return getOnlyRelativePath() + getFilename();
-
- }
-
-
- /**
- * get protocol + relative path + filename.
- * @return relative filename
- */
- public String getRelativeFilename()
- {
- if ( !this.isValid() )
- {
- return "";
- }
-
- if ( this.isRelative() )
- {
- return getRelativePath() + getFilename();
- }
- else
- {
- return getAbsoluteFilename();
- }
- }
-
-
- public String getFilename()
- {
- return m_fileName;
- }
-
-
- public String getProtocol()
- {
- return m_protocol;
- }
-
-
- /**
- * create all the directories not also present in the current path.
- * @return true if all directories was created, else false
- */
- public boolean createPath()
- {
- File path = new File( this.getOnlyAbsolutePath() );
- if ( path.exists() )
- {
- return true;
- }
- return path.mkdirs();
- }
-
-
- /**
- * create all the directories not also present in the current path and the file.
- * @return true it was created, else false
- */
- public boolean createFile()
- {
- File path = new File( this.getOnlyAbsolutePath() );
- if ( !path.exists() )
- {
- if ( !this.createPath() )
- {
- return false;
- }
- }
- path = new File( this.getOnlyAbsoluteFilename() );
- try
- {
- return path.createNewFile();
- }
- catch ( IOException e )
- {
- return false;
- }
-
- }
-
-
- /**
- * delete the current file.
- * @return true if it was deleted, else false
- */
- public boolean delete()
- {
- File path = new File( this.getAbsoluteFilename() );
- if ( path.exists() )
- {
- return path.delete();
- }
- else
- {
- return true;
- }
-
- }
-
- private static final String REGEXP_BACKSLASH = "\\\\";
-
-
- /**
- * replace all '\' by '\\' in the given string.
- * @param path string where replace the search pattern
- * @return string replaced
- */
- public static String doubleSeparator( String path )
- {
- // double the '\' in the path
- if ( path != null && File.separatorChar == '\\' )
- {
- return path.replaceAll( REGEXP_BACKSLASH, REGEXP_BACKSLASH + REGEXP_BACKSLASH );
- }
- else
- {
- return null;
- }
- }
-
-
- /**
- * file separator('\' or '/') by the one of the current system.
- * @param path string where replace the search pattern
- * @return string replaced
- */
- public static String uniformSeparator( String path )
- {
- if ( File.separatorChar == '\\' )
- {
- if ( path.startsWith( "/" ) )
- {
- return path.substring( 1 ).replace( '/', File.separatorChar );
- }
- else
- {
- return path.replace( '/', File.separatorChar );
- }
- }
- else
- {
- return path.replace( '\\', File.separatorChar );
- }
- }
-
-
- /**
- * copy file from src to dest.
- * @param src source file
- * @param dest destination file
- * @return true if the file was correctly copied, else false
- */
- public static boolean copyFile( PathFile src, PathFile dest )
- {
- FileChannel in = null;
- FileChannel out = null;
-
- if ( !src.isExists() )
- {
- System.err.println( "src file must exist: " + src.getAbsoluteFilename() );
- return false;
- }
- if ( !dest.isExists() )
- {
- dest.createFile();
- }
- try
- {
- in = new FileInputStream( src.getOnlyAbsoluteFilename() ).getChannel();
- out = new FileOutputStream( dest.getOnlyAbsoluteFilename() ).getChannel();
-
- in.transferTo( 0, in.size(), out );
- }
- catch ( Exception e )
- {
- e.printStackTrace();
- }
- finally
- {
- if ( in != null )
- {
- try
- {
- in.close();
- }
- catch ( IOException e )
- {
- return false;
- }
- }
- if ( out != null )
- {
- try
- {
- out.close();
- }
- catch ( IOException e )
- {
- return false;
- }
- }
- }
- return true;
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.channels.FileChannel;
+
+
+/**
+ * this class provide some functions to simplify file manipulation.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class PathFile
+{
+
+ /**
+ * full filename.
+ */
+ private String m_fullFilename;
+
+ /**
+ * store only the filename of the file.
+ */
+ private String m_fileName;
+
+ /**
+ * store only the path of this file.
+ */
+ private String m_pathFile;
+
+ /**
+ * store the base Directory in case of relative path.
+ */
+ private String m_baseDir;
+
+ /**
+ * store the protocol used (ie:file, http...).
+ */
+ private String m_protocol;
+
+ /**
+ * if the path is relative or absolute.
+ */
+ private boolean m_relative;
+
+ /**
+ * if this file is a folder.
+ */
+ private boolean m_folder;
+
+ /**
+ * if the file exist or not.
+ */
+ private boolean m_exist;
+
+ /**
+ * if this file is a file (not a folder).
+ */
+ private boolean m_file;
+
+ /**
+ * if this filename is valid or incomplete.
+ */
+ private boolean m_valid;
+
+
+ /**
+ * build all the attribute information.
+ * @param filename path to the file
+ */
+ public PathFile( String filename )
+ {
+
+ this.m_fullFilename = filename;
+ if ( filename == null )
+ {
+ this.m_valid = false;
+ return;
+ }
+ this.m_valid = true;
+ m_protocol = extractProtocol( filename );
+ m_pathFile = extractPathFile( filename );
+ if ( m_pathFile.startsWith( "//" ) )
+ {
+ // avoid problems on Unix like system
+ m_pathFile = m_pathFile.substring( 1 );
+ }
+ m_fileName = extractFileName( filename );
+ m_relative = extractRelative();
+ if ( !m_relative && ( getProtocol().compareTo( "file" ) == 0 || getProtocol().compareTo( "" ) == 0 ) )
+ {
+ File f = new File( getOnlyAbsoluteFilename() );
+ m_file = f.isFile();
+ m_folder = f.isDirectory();
+ m_exist = f.exists();
+ if ( m_folder )
+ {
+ m_pathFile = m_pathFile + m_fileName + File.separator;
+ m_fileName = "";
+ }
+ }
+ if ( m_exist )
+ {
+ m_protocol = "file";
+ }
+ else
+ {
+ if ( m_fileName.compareTo( "" ) == 0 )
+ {
+ m_folder = true;
+ m_file = false;
+ }
+ else
+ {
+ m_folder = false;
+ m_file = true;
+ }
+
+ }
+
+ // add the '/' before the complete path if it is absolute path
+ if ( !this.isRelative() && !m_pathFile.startsWith( "/" ) )
+ {
+ m_pathFile = "/".concat( m_pathFile );
+ }
+
+ }
+
+
+ /**
+ * get if the filename is relative or absolute.
+ * @return true if the path is relative, else false
+ */
+ private boolean extractRelative()
+ {
+ if ( m_pathFile.startsWith( "." + File.separator, 1 ) || m_pathFile.startsWith( ".." + File.separator, 1 ) )
+ {
+ m_pathFile = m_pathFile.substring( 1 );
+ m_valid = false;
+ return true;
+ }
+
+ return false;
+ }
+
+
+ /**
+ * get only the name from the filename.
+ * @param fullFilename full filename
+ * @return the name of the file or folder
+ */
+ private String extractFileName( String fullFilename )
+ {
+ int index = fullFilename.lastIndexOf( '/' ); // Given path
+ return fullFilename.substring( index + 1, fullFilename.length() );
+ }
+
+
+ /**
+ * get the path from the filename.
+ * @param fullFilename full filename
+ * @return the path of the file
+ */
+ private String extractPathFile( String fullFilename )
+ {
+ String substring;
+ if ( extractFileName( fullFilename ).compareTo( "" ) == 0 )
+ {
+ // it is a folder
+ substring = fullFilename;
+ }
+ else
+ {
+ substring = fullFilename.substring( 0, fullFilename.indexOf( extractFileName( fullFilename ) ) );
+ }
+
+ if ( getProtocol().compareTo( "" ) != 0 )
+ {
+ substring = substring.substring( 5 );
+ }
+
+ return substring;
+ }
+
+
+ /**
+ * determine which protocol is used.
+ * @param filename the full fileneme
+ * @return "file" or "http" or ""
+ */
+ private String extractProtocol( String filename )
+ {
+ if ( filename.startsWith( "file:" ) )
+ {
+ return "file";
+ }
+ if ( filename.startsWith( "http:" ) )
+ {
+ return "http";
+ }
+ return "";
+ }
+
+
+ /**
+ * set the base directory.
+ * @param baseDir new value for the base directory
+ */
+ public void setBaseDir( String baseDir )
+ {
+ this.m_baseDir = baseDir;
+ if ( isRelative() && this.m_fullFilename != null )
+ {
+ this.m_valid = true;
+ if ( getProtocol().compareTo( "file" ) == 0 || getProtocol().compareTo( "" ) == 0 )
+ {
+ File f = new File( getOnlyAbsoluteFilename() );
+ m_file = f.isFile();
+ m_folder = f.isDirectory();
+ m_exist = f.exists();
+ }
+ if ( m_exist )
+ {
+ m_protocol = "file";
+ }
+ }
+
+ }
+
+
+ /**
+ * get the base directory.
+ * @return base directory
+ */
+ public String getBaseDir()
+ {
+ return this.m_baseDir;
+ }
+
+
+ public boolean isValid()
+ {
+ return m_valid;
+ }
+
+
+ public boolean isRelative()
+ {
+ return m_relative;
+ }
+
+
+ public boolean isExists()
+ {
+ return m_exist;
+ }
+
+
+ public boolean isFile()
+ {
+ return m_file;
+ }
+
+
+ public boolean isFolder()
+ {
+ return m_folder;
+ }
+
+
+ /**
+ * get a File which points on the same file.
+ * @return a File object
+ */
+ public File getFile()
+ {
+ if ( !this.isValid() )
+ {
+ return null;
+ }
+ String path = PathFile.uniformSeparator( this.getOnlyAbsoluteFilename() );
+ if ( File.separatorChar == '\\' )
+ {
+ path = path.replace( '\\', '/' );
+ }
+ File f = new File( path );
+ return f;
+ }
+
+
+ /**
+ * get an URI which points on the same file.
+ * @return an URI object
+ */
+ public URI getUri()
+ {
+ if ( !this.isValid() )
+ {
+ return null;
+ }
+ String path = PathFile.uniformSeparator( getAbsoluteFilename() );
+ if ( File.separatorChar == '\\' )
+ {
+ path = path.replace( '\\', '/' );
+ }
+
+ path = path.replaceAll( " ", "%20" );
+
+ URI uri = null;
+ try
+ {
+ uri = new URI( path );
+ }
+ catch ( URISyntaxException e )
+ {
+ System.err.println( "Malformed URI: " + path );
+ System.err.println( e.getMessage() );
+ return null;
+ }
+ return uri;
+ }
+
+
+ /**
+ * get protocol + relative path of this file.
+ * @return the relative path or null if it is not valid
+ */
+ public String getRelativePath()
+ {
+ if ( !this.isValid() )
+ {
+ return null;
+ }
+
+ return getProtocol() + ":/" + getOnlyRelativePath();
+ }
+
+
+ /**
+ * get only (without protocol) relative path of this file.
+ * @return the relative path or null if it is not valid
+ */
+ public String getOnlyRelativePath()
+ {
+ if ( !this.isValid() )
+ {
+ return null;
+ }
+ if ( this.isRelative() )
+ {
+ return m_pathFile;
+
+ }
+ else
+ {
+ if ( m_baseDir != null )
+ {
+ // System.err.println(m_pathFile);
+ // System.err.println(m_baseDir);
+ if ( m_pathFile.startsWith( m_baseDir ) )
+ {
+ /*
+ * String ch1 = m_pathFile; String ch2 = m_baseDir; System.err.println(ch1); System.err.println(ch2); System.err.println("."+File.separator+ch1.substring(ch2.length()));
+ */
+ return "." + File.separator + m_pathFile.substring( m_baseDir.length() );
+ }
+ }
+ return m_pathFile;
+ }
+ }
+
+
+ /**
+ * calcul absolute path from relative path.
+ * @param baseDir base directory
+ * @param path path to convert
+ * @return the absolute path or null
+ */
+ private String calculAbsolutePath( String baseDir, String path )
+ {
+ if ( path.startsWith( ".." + File.separatorChar ) )
+ {
+ String base = baseDir;
+ int lastIndex;
+ lastIndex = base.lastIndexOf( File.separator );
+ if ( lastIndex == base.length() )
+ {
+ base = base.substring( 0, base.length() - 1 );
+ lastIndex = base.lastIndexOf( File.separator );
+ }
+ if ( lastIndex < base.length() )
+ {
+ return calculAbsolutePath( base.substring( 0, lastIndex + 1 ), path.substring( 3 ) );
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else if ( path.startsWith( "." + File.separatorChar ) )
+ {
+ String res;
+ if ( File.separatorChar == '\\' )
+ {
+ res = path.replaceFirst( ".", baseDir.replace( '\\', '/' ) );
+ }
+ else
+ {
+ res = path.replaceFirst( ".", baseDir );
+ }
+
+ return PathFile.uniformSeparator( res );
+ }
+ else
+ {
+ return PathFile.uniformSeparator( baseDir + path );
+ }
+ }
+
+
+ /**
+ * get only (without protocol) absolute path (without filename).
+ * @return absolute path
+ */
+ public String getOnlyAbsolutePath()
+ {
+ if ( !this.isValid() )
+ {
+ return null;
+ }
+ if ( isRelative() )
+ {
+ return calculAbsolutePath( m_baseDir, m_pathFile );
+ }
+ else
+ {
+ return m_pathFile;
+ }
+ }
+
+
+ /**
+ * get protocol + absolute path (without filename).
+ * @return absolute path
+ */
+ public String getAbsolutePath()
+ {
+
+ if ( isRelative() )
+ {
+ return getProtocol() + ":/" + calculAbsolutePath( m_baseDir, m_pathFile );
+ }
+ else
+ {
+ if ( getProtocol().compareTo( "" ) == 0 || m_pathFile == null )
+ {
+ return m_pathFile;
+ }
+ else
+ {
+ return getProtocol() + ":" + m_pathFile;
+ }
+ }
+ }
+
+
+ /**
+ * get only (without protocol) absolute path + filename.
+ * @return absolute filename
+ */
+ public String getOnlyAbsoluteFilename()
+ {
+ if ( getOnlyAbsolutePath() != null && getFilename() != null )
+ {
+ return getOnlyAbsolutePath() + getFilename();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * get protocol + absolute path + filename.
+ * @return absolute filenama
+ */
+ public String getAbsoluteFilename()
+ {
+ if ( getAbsolutePath() != null && getFilename() != null )
+ {
+ return getAbsolutePath() + getFilename();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * get only (without protocol) relative path + filename.
+ * @return relative filename
+ */
+ public String getOnlyRelativeFilename()
+ {
+ if ( !this.isValid() )
+ {
+ return "";
+ }
+
+ return getOnlyRelativePath() + getFilename();
+
+ }
+
+
+ /**
+ * get protocol + relative path + filename.
+ * @return relative filename
+ */
+ public String getRelativeFilename()
+ {
+ if ( !this.isValid() )
+ {
+ return "";
+ }
+
+ if ( this.isRelative() )
+ {
+ return getRelativePath() + getFilename();
+ }
+ else
+ {
+ return getAbsoluteFilename();
+ }
+ }
+
+
+ public String getFilename()
+ {
+ return m_fileName;
+ }
+
+
+ public String getProtocol()
+ {
+ return m_protocol;
+ }
+
+
+ /**
+ * create all the directories not also present in the current path.
+ * @return true if all directories was created, else false
+ */
+ public boolean createPath()
+ {
+ File path = new File( this.getOnlyAbsolutePath() );
+ if ( path.exists() )
+ {
+ return true;
+ }
+ return path.mkdirs();
+ }
+
+
+ /**
+ * create all the directories not also present in the current path and the file.
+ * @return true it was created, else false
+ */
+ public boolean createFile()
+ {
+ File path = new File( this.getOnlyAbsolutePath() );
+ if ( !path.exists() )
+ {
+ if ( !this.createPath() )
+ {
+ return false;
+ }
+ }
+ path = new File( this.getOnlyAbsoluteFilename() );
+ try
+ {
+ return path.createNewFile();
+ }
+ catch ( IOException e )
+ {
+ return false;
+ }
+
+ }
+
+
+ /**
+ * delete the current file.
+ * @return true if it was deleted, else false
+ */
+ public boolean delete()
+ {
+ File path = new File( this.getAbsoluteFilename() );
+ if ( path.exists() )
+ {
+ return path.delete();
+ }
+ else
+ {
+ return true;
+ }
+
+ }
+
+ private static final String REGEXP_BACKSLASH = "\\\\";
+
+
+ /**
+ * replace all '\' by '\\' in the given string.
+ * @param path string where replace the search pattern
+ * @return string replaced
+ */
+ public static String doubleSeparator( String path )
+ {
+ // double the '\' in the path
+ if ( path != null && File.separatorChar == '\\' )
+ {
+ return path.replaceAll( REGEXP_BACKSLASH, REGEXP_BACKSLASH + REGEXP_BACKSLASH );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * file separator('\' or '/') by the one of the current system.
+ * @param path string where replace the search pattern
+ * @return string replaced
+ */
+ public static String uniformSeparator( String path )
+ {
+ if ( File.separatorChar == '\\' )
+ {
+ if ( path.startsWith( "/" ) )
+ {
+ return path.substring( 1 ).replace( '/', File.separatorChar );
+ }
+ else
+ {
+ return path.replace( '/', File.separatorChar );
+ }
+ }
+ else
+ {
+ return path.replace( '\\', File.separatorChar );
+ }
+ }
+
+
+ /**
+ * copy file from src to dest.
+ * @param src source file
+ * @param dest destination file
+ * @return true if the file was correctly copied, else false
+ */
+ public static boolean copyFile( PathFile src, PathFile dest )
+ {
+ FileChannel in = null;
+ FileChannel out = null;
+
+ if ( !src.isExists() )
+ {
+ System.err.println( "src file must exist: " + src.getAbsoluteFilename() );
+ return false;
+ }
+ if ( !dest.isExists() )
+ {
+ dest.createFile();
+ }
+ try
+ {
+ in = new FileInputStream( src.getOnlyAbsoluteFilename() ).getChannel();
+ out = new FileOutputStream( dest.getOnlyAbsoluteFilename() ).getChannel();
+
+ in.transferTo( 0, in.size(), out );
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ if ( in != null )
+ {
+ try
+ {
+ in.close();
+ }
+ catch ( IOException e )
+ {
+ return false;
+ }
+ }
+ if ( out != null )
+ {
+ try
+ {
+ out.close();
+ }
+ catch ( IOException e )
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/RemoteFileManager.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/RemoteFileManager.java
index 8c503c1..44702bd 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/RemoteFileManager.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/RemoteFileManager.java
@@ -1,280 +1,280 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.maven.artifact.manager.WagonConfigurationException;
-import org.apache.maven.artifact.manager.WagonManager;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.settings.Proxy;
-import org.apache.maven.settings.Settings;
-import org.apache.maven.wagon.ConnectionException;
-import org.apache.maven.wagon.ResourceDoesNotExistException;
-import org.apache.maven.wagon.TransferFailedException;
-import org.apache.maven.wagon.UnsupportedProtocolException;
-import org.apache.maven.wagon.Wagon;
-import org.apache.maven.wagon.authentication.AuthenticationException;
-import org.apache.maven.wagon.authorization.AuthorizationException;
-import org.apache.maven.wagon.observers.Debug;
-import org.apache.maven.wagon.proxy.ProxyInfo;
-import org.apache.maven.wagon.repository.Repository;
-
-
-/**
- * this class is used to manage all connections by wagon.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class RemoteFileManager
-{
-
- /**
- * save the connection.
- */
- private Wagon m_wagon;
-
- /**
- * the wagon manager.
- */
- private WagonManager m_wagonManager;
-
- /**
- * artifact repository.
- */
- private ArtifactRepository m_artifactRepository;
-
- /**
- * the project settings.
- */
- private Settings m_settings;
-
- /**
- * logger instance.
- */
- private Log m_log;
-
-
- /**
- * initialize main information.
- * @param ar ArtifactRepository provides by maven
- * @param wm WagonManager provides by maven
- * @param settings settings of the current project provides by maven
- * @param log logger
- */
- public RemoteFileManager( ArtifactRepository ar, WagonManager wm, Settings settings, Log log )
- {
- m_artifactRepository = ar;
- m_wagonManager = wm;
- m_settings = settings;
- m_log = log;
- m_wagon = null;
- }
-
-
- /**
- * disconnect the current object.
- *
- */
- public void disconnect()
- {
- if ( m_wagon == null )
- {
- m_log.error( "must be connected first!" );
- return;
- }
- try
- {
- m_wagon.disconnect();
- }
- catch ( ConnectionException e )
- {
- m_log.error( "Error disconnecting wagon - ignored", e );
- }
- }
-
-
- /**
- * connect the current object to artifact repository given in constructor.
- * @throws MojoExecutionException if connection failed
- */
- public void connect() throws MojoExecutionException
- {
- String url = m_artifactRepository.getUrl();
- String id = m_artifactRepository.getId();
-
- Repository repository = new Repository( id, url );
-
- try
- {
- m_wagon = m_wagonManager.getWagon( repository );
- //configureWagon(m_wagon, repository.getId());
- }
- catch ( UnsupportedProtocolException e )
- {
- throw new MojoExecutionException( "Unsupported protocol: '" + repository.getProtocol() + "'", e );
- }
- catch ( WagonConfigurationException e )
- {
- throw new MojoExecutionException( "Unable to configure Wagon: '" + repository.getProtocol() + "'", e );
- }
-
- try
- {
- Debug debug = new Debug();
- m_wagon.addTransferListener( debug );
-
- ProxyInfo proxyInfo = getProxyInfo( m_settings );
- if ( proxyInfo != null )
- {
- m_wagon.connect( repository, m_wagonManager.getAuthenticationInfo( id ), proxyInfo );
- }
- else
- {
- m_wagon.connect( repository, m_wagonManager.getAuthenticationInfo( id ) );
- }
-
- }
- catch ( ConnectionException e )
- {
- throw new MojoExecutionException( "Error uploading file", e );
- }
- catch ( AuthenticationException e )
- {
- throw new MojoExecutionException( "Error uploading file", e );
- }
- }
-
-
- /**
- * get a file from the current repository connected.
- * @param url url to the targeted file
- * @return get a file descriptor on the requiered resource
- * @throws IOException if an IO error occurs
- * @throws TransferFailedException if the transfer failed
- * @throws ResourceDoesNotExistException if the targeted resource doesn't exist
- * @throws AuthorizationException if the connection authorization failed
- */
- public File get( String url ) throws IOException, TransferFailedException, ResourceDoesNotExistException,
- AuthorizationException
- {
-
- if ( m_wagon == null )
- {
- m_log.error( "must be connected first!" );
- return null;
- }
-
- File file = File.createTempFile( String.valueOf( System.currentTimeMillis() ), "tmp" );
- m_wagon.get( url, file );
- return file;
- }
-
-
- /**
- * put a file on the current repository connected.
- * @param file file to upload
- * @param url url to copy file
- * @throws TransferFailedException if the transfer failed
- * @throws ResourceDoesNotExistException if the targeted resource doesn't exist
- * @throws AuthorizationException if the connection authorization failed
- */
- public void put( File file, String url ) throws TransferFailedException, ResourceDoesNotExistException,
- AuthorizationException
- {
- if ( m_wagon == null )
- {
- m_log.error( "must be connected first!" );
- return;
- }
- m_wagon.put( file, url );
- }
-
-
- /**
- * Convenience method to map a Proxy object from the user system settings to a ProxyInfo object.
- * @param settings project settings given by maven
- * @return a proxyInfo object instancied or null if no active proxy is define in the settings.xml
- */
- public static ProxyInfo getProxyInfo( Settings settings )
- {
- ProxyInfo proxyInfo = null;
- if ( settings != null && settings.getActiveProxy() != null )
- {
- Proxy settingsProxy = settings.getActiveProxy();
-
- proxyInfo = new ProxyInfo();
- proxyInfo.setHost( settingsProxy.getHost() );
- proxyInfo.setType( settingsProxy.getProtocol() );
- proxyInfo.setPort( settingsProxy.getPort() );
- proxyInfo.setNonProxyHosts( settingsProxy.getNonProxyHosts() );
- proxyInfo.setUserName( settingsProxy.getUsername() );
- proxyInfo.setPassword( settingsProxy.getPassword() );
- }
-
- return proxyInfo;
- }
-
-
- /**
- * this method indicates if the targeted file is locked or not.
- * @param remote connection manager
- * @param fileName name targeted
- * @return true if thr reuiered file is locked, else false
- * @throws MojoFailureException if the plugin failed
- */
- public boolean isLockedFile( RemoteFileManager remote, String fileName ) throws MojoFailureException
- {
- File file = null;
- try
- {
- file = remote.get( fileName + ".lock" );
- }
- catch ( TransferFailedException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "TransferFailedException" );
-
- }
- catch ( ResourceDoesNotExistException e )
- {
- return false;
- }
- catch ( AuthorizationException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "AuthorizationException" );
- }
- catch ( IOException e )
- {
- e.printStackTrace();
- throw new MojoFailureException( "IOException" );
- }
- if ( file != null && file.length() == 0 )
- {
- return false;
- }
- return true;
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.artifact.manager.WagonConfigurationException;
+import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.observers.Debug;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+
+
+/**
+ * this class is used to manage all connections by wagon.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class RemoteFileManager
+{
+
+ /**
+ * save the connection.
+ */
+ private Wagon m_wagon;
+
+ /**
+ * the wagon manager.
+ */
+ private WagonManager m_wagonManager;
+
+ /**
+ * artifact repository.
+ */
+ private ArtifactRepository m_artifactRepository;
+
+ /**
+ * the project settings.
+ */
+ private Settings m_settings;
+
+ /**
+ * logger instance.
+ */
+ private Log m_log;
+
+
+ /**
+ * initialize main information.
+ * @param ar ArtifactRepository provides by maven
+ * @param wm WagonManager provides by maven
+ * @param settings settings of the current project provides by maven
+ * @param log logger
+ */
+ public RemoteFileManager( ArtifactRepository ar, WagonManager wm, Settings settings, Log log )
+ {
+ m_artifactRepository = ar;
+ m_wagonManager = wm;
+ m_settings = settings;
+ m_log = log;
+ m_wagon = null;
+ }
+
+
+ /**
+ * disconnect the current object.
+ *
+ */
+ public void disconnect()
+ {
+ if ( m_wagon == null )
+ {
+ m_log.error( "must be connected first!" );
+ return;
+ }
+ try
+ {
+ m_wagon.disconnect();
+ }
+ catch ( ConnectionException e )
+ {
+ m_log.error( "Error disconnecting wagon - ignored", e );
+ }
+ }
+
+
+ /**
+ * connect the current object to artifact repository given in constructor.
+ * @throws MojoExecutionException if connection failed
+ */
+ public void connect() throws MojoExecutionException
+ {
+ String url = m_artifactRepository.getUrl();
+ String id = m_artifactRepository.getId();
+
+ Repository repository = new Repository( id, url );
+
+ try
+ {
+ m_wagon = m_wagonManager.getWagon( repository );
+ //configureWagon(m_wagon, repository.getId());
+ }
+ catch ( UnsupportedProtocolException e )
+ {
+ throw new MojoExecutionException( "Unsupported protocol: '" + repository.getProtocol() + "'", e );
+ }
+ catch ( WagonConfigurationException e )
+ {
+ throw new MojoExecutionException( "Unable to configure Wagon: '" + repository.getProtocol() + "'", e );
+ }
+
+ try
+ {
+ Debug debug = new Debug();
+ m_wagon.addTransferListener( debug );
+
+ ProxyInfo proxyInfo = getProxyInfo( m_settings );
+ if ( proxyInfo != null )
+ {
+ m_wagon.connect( repository, m_wagonManager.getAuthenticationInfo( id ), proxyInfo );
+ }
+ else
+ {
+ m_wagon.connect( repository, m_wagonManager.getAuthenticationInfo( id ) );
+ }
+
+ }
+ catch ( ConnectionException e )
+ {
+ throw new MojoExecutionException( "Error uploading file", e );
+ }
+ catch ( AuthenticationException e )
+ {
+ throw new MojoExecutionException( "Error uploading file", e );
+ }
+ }
+
+
+ /**
+ * get a file from the current repository connected.
+ * @param url url to the targeted file
+ * @return get a file descriptor on the requiered resource
+ * @throws IOException if an IO error occurs
+ * @throws TransferFailedException if the transfer failed
+ * @throws ResourceDoesNotExistException if the targeted resource doesn't exist
+ * @throws AuthorizationException if the connection authorization failed
+ */
+ public File get( String url ) throws IOException, TransferFailedException, ResourceDoesNotExistException,
+ AuthorizationException
+ {
+
+ if ( m_wagon == null )
+ {
+ m_log.error( "must be connected first!" );
+ return null;
+ }
+
+ File file = File.createTempFile( String.valueOf( System.currentTimeMillis() ), "tmp" );
+ m_wagon.get( url, file );
+ return file;
+ }
+
+
+ /**
+ * put a file on the current repository connected.
+ * @param file file to upload
+ * @param url url to copy file
+ * @throws TransferFailedException if the transfer failed
+ * @throws ResourceDoesNotExistException if the targeted resource doesn't exist
+ * @throws AuthorizationException if the connection authorization failed
+ */
+ public void put( File file, String url ) throws TransferFailedException, ResourceDoesNotExistException,
+ AuthorizationException
+ {
+ if ( m_wagon == null )
+ {
+ m_log.error( "must be connected first!" );
+ return;
+ }
+ m_wagon.put( file, url );
+ }
+
+
+ /**
+ * Convenience method to map a Proxy object from the user system settings to a ProxyInfo object.
+ * @param settings project settings given by maven
+ * @return a proxyInfo object instancied or null if no active proxy is define in the settings.xml
+ */
+ public static ProxyInfo getProxyInfo( Settings settings )
+ {
+ ProxyInfo proxyInfo = null;
+ if ( settings != null && settings.getActiveProxy() != null )
+ {
+ Proxy settingsProxy = settings.getActiveProxy();
+
+ proxyInfo = new ProxyInfo();
+ proxyInfo.setHost( settingsProxy.getHost() );
+ proxyInfo.setType( settingsProxy.getProtocol() );
+ proxyInfo.setPort( settingsProxy.getPort() );
+ proxyInfo.setNonProxyHosts( settingsProxy.getNonProxyHosts() );
+ proxyInfo.setUserName( settingsProxy.getUsername() );
+ proxyInfo.setPassword( settingsProxy.getPassword() );
+ }
+
+ return proxyInfo;
+ }
+
+
+ /**
+ * this method indicates if the targeted file is locked or not.
+ * @param remote connection manager
+ * @param fileName name targeted
+ * @return true if thr reuiered file is locked, else false
+ * @throws MojoFailureException if the plugin failed
+ */
+ public boolean isLockedFile( RemoteFileManager remote, String fileName ) throws MojoFailureException
+ {
+ File file = null;
+ try
+ {
+ file = remote.get( fileName + ".lock" );
+ }
+ catch ( TransferFailedException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "TransferFailedException" );
+
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ return false;
+ }
+ catch ( AuthorizationException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "AuthorizationException" );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ throw new MojoFailureException( "IOException" );
+ }
+ if ( file != null && file.length() == 0 )
+ {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Require.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Require.java
index 76162fc..fdc104b 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Require.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/Require.java
@@ -1,204 +1,204 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-
-/**
- * this class store a Require tag.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class Require
-{
-
- /**
- * store the extend attribute.
- */
- private String m_extend;
-
- /**
- * store the multiple attribute.
- */
- private String m_multiple;
-
- /**
- * store the optional attribute.
- */
- private String m_optional;
-
- /**
- * store the name attribute.
- */
- private String m_name;
-
- /**
- * store the filter attribute.
- */
- private String m_filter;
-
- /**
- * store the value of the tag.
- */
- private String m_value;
-
-
- /**
- * get the extend attribute.
- * @return a string which contains the value of the boolean
- */
- public String getExtend()
- {
- return m_extend;
- }
-
-
- /**
- * set the extend attribute.
- * @param extend new value for the extend attribute
- */
- public void setExtend( String extend )
- {
- this.m_extend = extend;
- }
-
-
- /**
- * get the filter attribute.
- * @return m_filter value
- */
- public String getFilter()
- {
- return m_filter;
- }
-
-
- /**
- * set the filter attribute.
- * @param filter new value for filter
- */
- public void setFilter( String filter )
- {
- this.m_filter = filter;
- }
-
-
- /**
- * get multiple attribute.
- * @return m_multiple value
- */
- public String getMultiple()
- {
- return m_multiple;
- }
-
-
- /**
- * set multiple attribute.
- * @param multiple new value for m_multiple
- */
- public void setMultiple( String multiple )
- {
- this.m_multiple = multiple;
- }
-
-
- /**
- * get name attribute.
- * @return m_name value
- */
- public String getName()
- {
- return m_name;
- }
-
-
- /**
- * set name attribute.
- * @param name new value for m_name
- */
- public void setName( String name )
- {
- this.m_name = name;
- }
-
-
- /**
- * get the optional attribute.
- * @return m_optional value
- */
- public String getOptional()
- {
- return m_optional;
- }
-
-
- /**
- * set the optional attribute.
- * @param optionnal new value for m_optional
- */
- public void setOptional( String optionnal )
- {
- this.m_optional = optionnal;
- }
-
-
- /**
- * get value of the tag.
- * @return value of this tag
- */
- public String getValue()
- {
- return m_value;
- }
-
-
- /**
- * set the value of the tag.
- * @param value new value for this tag
- */
- public void setValue( String value )
- {
- this.m_value = value;
- }
-
-
- /**
- * transform this object to Node.
- *
- * @param father father document for create Node
- * @return node
- */
- public Node getNode( Document father )
- {
- Element require = father.createElement( "require" );
- require.setAttribute( "name", this.getName() );
- require.setAttribute( "filter", this.getFilter() );
- require.setAttribute( "extend", this.getExtend() );
- require.setAttribute( "multiple", this.getMultiple() );
- require.setAttribute( "optional", this.getOptional() );
- XmlHelper.setTextContent( require, this.getValue() );
-
- return require;
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * this class store a Require tag.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class Require
+{
+
+ /**
+ * store the extend attribute.
+ */
+ private String m_extend;
+
+ /**
+ * store the multiple attribute.
+ */
+ private String m_multiple;
+
+ /**
+ * store the optional attribute.
+ */
+ private String m_optional;
+
+ /**
+ * store the name attribute.
+ */
+ private String m_name;
+
+ /**
+ * store the filter attribute.
+ */
+ private String m_filter;
+
+ /**
+ * store the value of the tag.
+ */
+ private String m_value;
+
+
+ /**
+ * get the extend attribute.
+ * @return a string which contains the value of the boolean
+ */
+ public String getExtend()
+ {
+ return m_extend;
+ }
+
+
+ /**
+ * set the extend attribute.
+ * @param extend new value for the extend attribute
+ */
+ public void setExtend( String extend )
+ {
+ this.m_extend = extend;
+ }
+
+
+ /**
+ * get the filter attribute.
+ * @return m_filter value
+ */
+ public String getFilter()
+ {
+ return m_filter;
+ }
+
+
+ /**
+ * set the filter attribute.
+ * @param filter new value for filter
+ */
+ public void setFilter( String filter )
+ {
+ this.m_filter = filter;
+ }
+
+
+ /**
+ * get multiple attribute.
+ * @return m_multiple value
+ */
+ public String getMultiple()
+ {
+ return m_multiple;
+ }
+
+
+ /**
+ * set multiple attribute.
+ * @param multiple new value for m_multiple
+ */
+ public void setMultiple( String multiple )
+ {
+ this.m_multiple = multiple;
+ }
+
+
+ /**
+ * get name attribute.
+ * @return m_name value
+ */
+ public String getName()
+ {
+ return m_name;
+ }
+
+
+ /**
+ * set name attribute.
+ * @param name new value for m_name
+ */
+ public void setName( String name )
+ {
+ this.m_name = name;
+ }
+
+
+ /**
+ * get the optional attribute.
+ * @return m_optional value
+ */
+ public String getOptional()
+ {
+ return m_optional;
+ }
+
+
+ /**
+ * set the optional attribute.
+ * @param optionnal new value for m_optional
+ */
+ public void setOptional( String optionnal )
+ {
+ this.m_optional = optionnal;
+ }
+
+
+ /**
+ * get value of the tag.
+ * @return value of this tag
+ */
+ public String getValue()
+ {
+ return m_value;
+ }
+
+
+ /**
+ * set the value of the tag.
+ * @param value new value for this tag
+ */
+ public void setValue( String value )
+ {
+ this.m_value = value;
+ }
+
+
+ /**
+ * transform this object to Node.
+ *
+ * @param father father document for create Node
+ * @return node
+ */
+ public Node getNode( Document father )
+ {
+ Element require = father.createElement( "require" );
+ require.setAttribute( "name", this.getName() );
+ require.setAttribute( "filter", this.getFilter() );
+ require.setAttribute( "extend", this.getExtend() );
+ require.setAttribute( "multiple", this.getMultiple() );
+ require.setAttribute( "optional", this.getOptional() );
+ XmlHelper.setTextContent( require, this.getValue() );
+
+ return require;
+ }
+
+}
diff --git a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ResourcesBundle.java b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ResourcesBundle.java
index 0c3fb45..a1e996d 100644
--- a/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ResourcesBundle.java
+++ b/maven-obr-plugin/src/main/java/org/apache/felix/obr/plugin/ResourcesBundle.java
@@ -1,678 +1,678 @@
-/*
- * 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.felix.obr.plugin;
-
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-
-/**
- * this class describe all information by bundle.
- * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
- */
-public class ResourcesBundle
-{
- /**
- * store the bundle symbolic name.
- */
- private String m_symbolicName;
-
- /**
- * store the bundle presentation name.
- */
- private String m_presentationName;
-
- /**
- * store the bundle version.
- */
- private String m_version;
-
- /**
- * store the bundle URI.
- */
- private String m_uri;
-
- /**
- * store the bundle description.
- */
- private String m_description;
-
- /**
- * store the bundle size.
- */
- private String m_size;
-
- /**
- * store the bundle documentation.
- */
- private String m_documentation;
-
- /**
- * store the bundle source.
- */
- private String m_source;
-
- /**
- * store the bundle license.
- */
- private String m_license;
-
- /**
- * store the bundle id.
- */
- private String m_id;
-
- /**
- * store the bundle categories.
- */
- private List m_category = new ArrayList();
-
- /**
- * store the bundle capabilities.
- */
- private List m_capability = new ArrayList();
-
- /**
- * store the bundle requirement.
- */
- private List m_require = new ArrayList();
-
- /**
- * get the plugin logger.
- */
- private Log m_logger;
-
-
- /**
- * initialize logger.
- * @param log log use by plugin
- */
- public ResourcesBundle( Log log )
- {
- m_logger = log;
- }
-
-
- public List getCapability()
- {
- return m_capability;
- }
-
-
- public void setCapability( List capability )
- {
- this.m_capability = capability;
- }
-
-
- public List getCategory()
- {
- return m_category;
- }
-
-
- public void setCategory( List category )
- {
- this.m_category = category;
- }
-
-
- public String getLicense()
- {
- return m_license;
- }
-
-
- public void setLicense( String license )
- {
- this.m_license = license;
- }
-
-
- public String getDescription()
- {
- return m_description;
- }
-
-
- public void setDescription( String description )
- {
- this.m_description = description;
- }
-
-
- public String getDocumentation()
- {
- return m_documentation;
- }
-
-
- public void setDocumentation( String documentation )
- {
- this.m_documentation = documentation;
- }
-
-
- public String getPresentationName()
- {
- return m_presentationName;
- }
-
-
- public void setPresentationName( String name )
- {
- m_presentationName = name;
- }
-
-
- public String getSize()
- {
- return m_size;
- }
-
-
- public void setSize( String size )
- {
- this.m_size = size;
- }
-
-
- public String getSymbolicName()
- {
- return m_symbolicName;
- }
-
-
- public void setSymbolicName( String name )
- {
- m_symbolicName = name;
- }
-
-
- public String getUri()
- {
- return m_uri;
- }
-
-
- public void setUri( String url )
- {
- this.m_uri = url;
- }
-
-
- public String getVersion()
- {
- return m_version;
- }
-
-
- public void setVersion( String version )
- {
- this.m_version = version;
- }
-
-
- public List getRequire()
- {
- return m_require;
- }
-
-
- public void setRequire( List require )
- {
- this.m_require = require;
- }
-
-
- public String getSource()
- {
- return m_source;
- }
-
-
- public void setSource( String source )
- {
- this.m_source = source;
- }
-
-
- public String getId()
- {
- return m_id;
- }
-
-
- public void setId( String id )
- {
- this.m_id = id;
- }
-
-
- /**
- * add a new capability for this bundle description.
- * @param capability the Capability to add
- */
- public void addCapability( Capability capability )
- {
- m_capability.add( capability );
- }
-
-
- /**
- * add a new requirement for this bundle description.
- * @param require th Require to add
- */
- public void addRequire( Require require )
- {
- m_require.add( require );
- }
-
-
- /**
- * add a new category for this bundle decription.
- * @param category the Category to add
- */
- public void addCategory( Category category )
- {
- m_category.add( category );
- }
-
-
- /**
- * transform this object to Node.
- * tranform all sub-object to node also
- * @param father father document for create Node
- * @return node
- */
- public Node getNode( Document father )
- {
- // return the complete resource tree
- if ( !this.isValid() || this.getId() == null )
- {
- m_logger.error( "those properties was not defined:" + this.getInvalidProperties() );
- return null;
- }
-
- Element resource = father.createElement( "resource" );
- Element description = father.createElement( "description" );
- Element size = father.createElement( "size" );
- Element documentation = father.createElement( "documentation" );
- Element source = father.createElement( "source" );
- Element license = father.createElement( "license" );
-
- resource.setAttribute( "id", this.getId() );
- resource.setAttribute( "symbolicname", this.getSymbolicName() );
- resource.setAttribute( "presentationname", this.getPresentationName() );
- resource.setAttribute( "uri", this.getUri() );
- resource.setAttribute( "version", this.getVersion() );
-
- XmlHelper.setTextContent( description, this.getDescription() );
- resource.appendChild( description );
-
- XmlHelper.setTextContent( size, this.getSize() );
- resource.appendChild( size );
-
- if ( this.getDocumentation() != null )
- {
- XmlHelper.setTextContent( documentation, this.getDocumentation() );
- resource.appendChild( documentation );
- }
-
- if ( this.getSource() != null )
- {
- XmlHelper.setTextContent( source, this.getSource() );
- resource.appendChild( source );
- }
-
- if ( this.getLicense() != null )
- {
- XmlHelper.setTextContent( license, this.getLicense() );
- resource.appendChild( license );
- }
-
- List list = ( ArrayList ) this.getNodeCategories( father );
- for ( int i = 0; i < list.size(); i++ )
- {
- resource.appendChild( ( Node ) list.get( i ) );
- }
-
- list = ( ArrayList ) this.getNodeCapabilities( father );
- for ( int i = 0; i < list.size(); i++ )
- {
- resource.appendChild( ( Node ) list.get( i ) );
- }
-
- list = ( ArrayList ) this.getNodeRequirement( father );
- for ( int i = 0; i < list.size(); i++ )
- {
- resource.appendChild( ( Node ) list.get( i ) );
- }
-
- return resource;
- }
-
-
- /**
- * this method gets information form pom.xml to complete missing data from those given by user.
- * @param project project information given by maven
- * @param ebi bundle information extracted from bindex
- * @return true
- */
- public boolean construct( MavenProject project, ExtractBindexInfo ebi )
- {
-
- if ( ebi.getPresentationName() != null )
- {
- this.setPresentationName( ebi.getPresentationName() );
- if ( project.getName() != null )
- {
- m_logger.debug( "pom property override:<presentationname> " + project.getName() );
- }
- }
- else
- {
- this.setPresentationName( project.getName() );
- }
-
- if ( ebi.getSymbolicName() != null )
- {
- this.setSymbolicName( ebi.getSymbolicName() );
- if ( project.getArtifactId() != null )
- {
- m_logger.debug( "pom property override:<symbolicname> " + project.getArtifactId() );
- }
- }
- else
- {
- this.setSymbolicName( project.getArtifactId() );
- }
-
- if ( ebi.getVersion() != null )
- {
- this.setVersion( ebi.getVersion() );
- if ( project.getVersion() != null )
- {
- m_logger.debug( "pom property override:<version> " + project.getVersion() );
- }
- }
- else
- {
- this.setVersion( project.getVersion() );
- }
-
- if ( ebi.getId() != null )
- {
- this.setId( ebi.getId() );
- }
-
- if ( ebi.getDescription() != null )
- {
- this.setDescription( ebi.getDescription() );
- if ( project.getDescription() != null )
- {
- m_logger.debug( "pom property override:<description> " + project.getDescription() );
- }
- }
- else
- {
- this.setDescription( project.getDescription() );
- }
-
- if ( ebi.getDocumentation() != null )
- {
- this.setDocumentation( ebi.getDocumentation() );
- if ( project.getUrl() != null )
- {
- m_logger.debug( "pom property override:<documentation> " + project.getUrl() );
- }
- }
- else
- {
- this.setDocumentation( project.getUrl() );
- }
-
- if ( ebi.getSource() != null )
- {
- this.setSource( ebi.getSource() );
- if ( project.getScm() != null )
- {
- m_logger.debug( "pom property override:<source> " + project.getScm() );
- }
- }
- else
- {
- String src = null;
- if ( project.getScm() != null )
- {
- src = project.getScm().getUrl();
- }
- this.setSource( src );
- }
-
- if ( ebi.getLicense() != null )
- {
- this.setLicense( ebi.getLicense() );
- String lic = null;
- List l = project.getLicenses();
- Iterator it = l.iterator();
- while ( it.hasNext() )
- {
- if ( it.next() != null )
- {
- m_logger.debug( "pom property override:<license> " + lic );
- break;
- }
- }
- }
- else
- {
- String lic = null;
- List l = project.getLicenses();
- Iterator it = l.iterator();
- while ( it.hasNext() )
- {
- lic = it.next() + ";";
- }
-
- this.setLicense( lic );
- }
-
- // create the first capability (ie : bundle)
- Capability capability = new Capability();
- capability.setName( "bundle" );
- PElement p = new PElement();
- p.setN( "manifestversion" );
- p.setV( "2" );
- capability.addP( p );
-
- p = new PElement();
- p.setN( "presentationname" );
- p.setV( this.getPresentationName() );
- capability.addP( p );
-
- p = new PElement();
- p.setN( "symbolicname" );
- p.setV( this.getSymbolicName() );
- capability.addP( p );
-
- p = new PElement();
- p.setN( "version" );
- p.setT( "version" );
- p.setV( this.getVersion() );
- capability.addP( p );
-
- this.addCapability( capability );
-
- List capabilities = ( ArrayList ) ebi.getCapabilities();
- for ( int i = 0; i < capabilities.size(); i++ )
- {
- this.addCapability( ( Capability ) capabilities.get( i ) );
- }
-
- List requirement = ( ArrayList ) ebi.getRequirement();
- for ( int i = 0; i < requirement.size(); i++ )
- {
- this.addRequire( ( Require ) requirement.get( i ) );
- }
-
- // we also add the goupId
- Category category = new Category();
- category.setId( project.getGroupId() );
- this.addCategory( category );
-
- return true;
- }
-
-
- /**
- * return if the bundle resource is complete.
- * @return false if an information is missing, else true
- */
- public boolean isValid()
- {
- // we must verify required properties are present
- return this.getPresentationName() != null && this.getSymbolicName() != null && this.getVersion() != null
- && this.getUri() != null && this.getSize() != null;
- }
-
-
- /**
- * test if this bundle has the same symbolicname, and version number.
- * @param symbolicName symbolicName to compare with current bundle
- * @param presentationName presentationName to compare with current bundlde
- * @param version version to compare with current bundle
- * @return true if the information are the same, else false
- */
- public boolean isSameBundleResource( String symbolicName, String version )
- {
- if ( this.isValid() )
- {
- return ( symbolicName.compareTo( this.getSymbolicName() ) == 0 )
- && ( version.compareTo( this.getVersion() ) == 0 );
- }
- else
- {
- return false;
- }
-
- }
-
-
- /**
- * return a list of categories transformed to node.
- * @param father father document to create node from same document
- * @return List of Node
- */
- private List getNodeCategories( Document father )
- {
- List listNode = new ArrayList();
- List listCategory = ( ArrayList ) this.getCategory();
- for ( int i = 0; i < listCategory.size(); i++ )
- {
- listNode.add( ( ( Category ) listCategory.get( i ) ).getNode( father ) );
- }
- return listNode;
- }
-
-
- /**
- * return a list of capabilities transformed to node.
- * @param father father document to create node from same document
- * @return List of Node
- */
- private List getNodeCapabilities( Document father )
- {
- List listNode = new ArrayList();
- List listCapability = ( ArrayList ) this.getCapability();
- for ( int i = 0; i < listCapability.size(); i++ )
- {
- listNode.add( ( ( Capability ) listCapability.get( i ) ).getNode( father ) );
- }
- return listNode;
- }
-
-
- /**
- * return a list of requirement transformed to node.
- * @param father father document to create node from same document
- * @return List of Node.
- */
- private List getNodeRequirement( Document father )
- {
- List listNode = new ArrayList();
- List listRequirement = ( ArrayList ) this.getRequire();
- for ( int i = 0; i < listRequirement.size(); i++ )
- {
- listNode.add( ( ( Require ) listRequirement.get( i ) ).getNode( father ) );
- }
- return listNode;
- }
-
-
- /**
- * return the list of properties not define in this bundle resource.
- * @return list of properties not define
- */
- private String getInvalidProperties()
- {
- if ( this.isValid() )
- {
- if ( this.getId() == null )
- {
- return "id";
- }
- else
- {
- return "";
- }
- }
- String result = "";
- if ( this.getPresentationName() == null )
- {
- result = result + "presentationName;";
- }
- if ( this.getSymbolicName() == null )
- {
- result = result + "symbolicName;";
- }
- if ( this.getVersion() == null )
- {
- result = result + "version;";
- }
- if ( this.getUri() == null )
- {
- result = result + "Uri;";
- }
- if ( this.getSize() == null )
- {
- result = result + "Size";
- }
- return result;
- }
-
-}
+/*
+ * 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.felix.obr.plugin;
+
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * this class describe all information by bundle.
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class ResourcesBundle
+{
+ /**
+ * store the bundle symbolic name.
+ */
+ private String m_symbolicName;
+
+ /**
+ * store the bundle presentation name.
+ */
+ private String m_presentationName;
+
+ /**
+ * store the bundle version.
+ */
+ private String m_version;
+
+ /**
+ * store the bundle URI.
+ */
+ private String m_uri;
+
+ /**
+ * store the bundle description.
+ */
+ private String m_description;
+
+ /**
+ * store the bundle size.
+ */
+ private String m_size;
+
+ /**
+ * store the bundle documentation.
+ */
+ private String m_documentation;
+
+ /**
+ * store the bundle source.
+ */
+ private String m_source;
+
+ /**
+ * store the bundle license.
+ */
+ private String m_license;
+
+ /**
+ * store the bundle id.
+ */
+ private String m_id;
+
+ /**
+ * store the bundle categories.
+ */
+ private List m_category = new ArrayList();
+
+ /**
+ * store the bundle capabilities.
+ */
+ private List m_capability = new ArrayList();
+
+ /**
+ * store the bundle requirement.
+ */
+ private List m_require = new ArrayList();
+
+ /**
+ * get the plugin logger.
+ */
+ private Log m_logger;
+
+
+ /**
+ * initialize logger.
+ * @param log log use by plugin
+ */
+ public ResourcesBundle( Log log )
+ {
+ m_logger = log;
+ }
+
+
+ public List getCapability()
+ {
+ return m_capability;
+ }
+
+
+ public void setCapability( List capability )
+ {
+ this.m_capability = capability;
+ }
+
+
+ public List getCategory()
+ {
+ return m_category;
+ }
+
+
+ public void setCategory( List category )
+ {
+ this.m_category = category;
+ }
+
+
+ public String getLicense()
+ {
+ return m_license;
+ }
+
+
+ public void setLicense( String license )
+ {
+ this.m_license = license;
+ }
+
+
+ public String getDescription()
+ {
+ return m_description;
+ }
+
+
+ public void setDescription( String description )
+ {
+ this.m_description = description;
+ }
+
+
+ public String getDocumentation()
+ {
+ return m_documentation;
+ }
+
+
+ public void setDocumentation( String documentation )
+ {
+ this.m_documentation = documentation;
+ }
+
+
+ public String getPresentationName()
+ {
+ return m_presentationName;
+ }
+
+
+ public void setPresentationName( String name )
+ {
+ m_presentationName = name;
+ }
+
+
+ public String getSize()
+ {
+ return m_size;
+ }
+
+
+ public void setSize( String size )
+ {
+ this.m_size = size;
+ }
+
+
+ public String getSymbolicName()
+ {
+ return m_symbolicName;
+ }
+
+
+ public void setSymbolicName( String name )
+ {
+ m_symbolicName = name;
+ }
+
+
+ public String getUri()
+ {
+ return m_uri;
+ }
+
+
+ public void setUri( String url )
+ {
+ this.m_uri = url;
+ }
+
+
+ public String getVersion()
+ {
+ return m_version;
+ }
+
+
+ public void setVersion( String version )
+ {
+ this.m_version = version;
+ }
+
+
+ public List getRequire()
+ {
+ return m_require;
+ }
+
+
+ public void setRequire( List require )
+ {
+ this.m_require = require;
+ }
+
+
+ public String getSource()
+ {
+ return m_source;
+ }
+
+
+ public void setSource( String source )
+ {
+ this.m_source = source;
+ }
+
+
+ public String getId()
+ {
+ return m_id;
+ }
+
+
+ public void setId( String id )
+ {
+ this.m_id = id;
+ }
+
+
+ /**
+ * add a new capability for this bundle description.
+ * @param capability the Capability to add
+ */
+ public void addCapability( Capability capability )
+ {
+ m_capability.add( capability );
+ }
+
+
+ /**
+ * add a new requirement for this bundle description.
+ * @param require th Require to add
+ */
+ public void addRequire( Require require )
+ {
+ m_require.add( require );
+ }
+
+
+ /**
+ * add a new category for this bundle decription.
+ * @param category the Category to add
+ */
+ public void addCategory( Category category )
+ {
+ m_category.add( category );
+ }
+
+
+ /**
+ * transform this object to Node.
+ * tranform all sub-object to node also
+ * @param father father document for create Node
+ * @return node
+ */
+ public Node getNode( Document father )
+ {
+ // return the complete resource tree
+ if ( !this.isValid() || this.getId() == null )
+ {
+ m_logger.error( "those properties was not defined:" + this.getInvalidProperties() );
+ return null;
+ }
+
+ Element resource = father.createElement( "resource" );
+ Element description = father.createElement( "description" );
+ Element size = father.createElement( "size" );
+ Element documentation = father.createElement( "documentation" );
+ Element source = father.createElement( "source" );
+ Element license = father.createElement( "license" );
+
+ resource.setAttribute( "id", this.getId() );
+ resource.setAttribute( "symbolicname", this.getSymbolicName() );
+ resource.setAttribute( "presentationname", this.getPresentationName() );
+ resource.setAttribute( "uri", this.getUri() );
+ resource.setAttribute( "version", this.getVersion() );
+
+ XmlHelper.setTextContent( description, this.getDescription() );
+ resource.appendChild( description );
+
+ XmlHelper.setTextContent( size, this.getSize() );
+ resource.appendChild( size );
+
+ if ( this.getDocumentation() != null )
+ {
+ XmlHelper.setTextContent( documentation, this.getDocumentation() );
+ resource.appendChild( documentation );
+ }
+
+ if ( this.getSource() != null )
+ {
+ XmlHelper.setTextContent( source, this.getSource() );
+ resource.appendChild( source );
+ }
+
+ if ( this.getLicense() != null )
+ {
+ XmlHelper.setTextContent( license, this.getLicense() );
+ resource.appendChild( license );
+ }
+
+ List list = ( ArrayList ) this.getNodeCategories( father );
+ for ( int i = 0; i < list.size(); i++ )
+ {
+ resource.appendChild( ( Node ) list.get( i ) );
+ }
+
+ list = ( ArrayList ) this.getNodeCapabilities( father );
+ for ( int i = 0; i < list.size(); i++ )
+ {
+ resource.appendChild( ( Node ) list.get( i ) );
+ }
+
+ list = ( ArrayList ) this.getNodeRequirement( father );
+ for ( int i = 0; i < list.size(); i++ )
+ {
+ resource.appendChild( ( Node ) list.get( i ) );
+ }
+
+ return resource;
+ }
+
+
+ /**
+ * this method gets information form pom.xml to complete missing data from those given by user.
+ * @param project project information given by maven
+ * @param ebi bundle information extracted from bindex
+ * @return true
+ */
+ public boolean construct( MavenProject project, ExtractBindexInfo ebi )
+ {
+
+ if ( ebi.getPresentationName() != null )
+ {
+ this.setPresentationName( ebi.getPresentationName() );
+ if ( project.getName() != null )
+ {
+ m_logger.debug( "pom property override:<presentationname> " + project.getName() );
+ }
+ }
+ else
+ {
+ this.setPresentationName( project.getName() );
+ }
+
+ if ( ebi.getSymbolicName() != null )
+ {
+ this.setSymbolicName( ebi.getSymbolicName() );
+ if ( project.getArtifactId() != null )
+ {
+ m_logger.debug( "pom property override:<symbolicname> " + project.getArtifactId() );
+ }
+ }
+ else
+ {
+ this.setSymbolicName( project.getArtifactId() );
+ }
+
+ if ( ebi.getVersion() != null )
+ {
+ this.setVersion( ebi.getVersion() );
+ if ( project.getVersion() != null )
+ {
+ m_logger.debug( "pom property override:<version> " + project.getVersion() );
+ }
+ }
+ else
+ {
+ this.setVersion( project.getVersion() );
+ }
+
+ if ( ebi.getId() != null )
+ {
+ this.setId( ebi.getId() );
+ }
+
+ if ( ebi.getDescription() != null )
+ {
+ this.setDescription( ebi.getDescription() );
+ if ( project.getDescription() != null )
+ {
+ m_logger.debug( "pom property override:<description> " + project.getDescription() );
+ }
+ }
+ else
+ {
+ this.setDescription( project.getDescription() );
+ }
+
+ if ( ebi.getDocumentation() != null )
+ {
+ this.setDocumentation( ebi.getDocumentation() );
+ if ( project.getUrl() != null )
+ {
+ m_logger.debug( "pom property override:<documentation> " + project.getUrl() );
+ }
+ }
+ else
+ {
+ this.setDocumentation( project.getUrl() );
+ }
+
+ if ( ebi.getSource() != null )
+ {
+ this.setSource( ebi.getSource() );
+ if ( project.getScm() != null )
+ {
+ m_logger.debug( "pom property override:<source> " + project.getScm() );
+ }
+ }
+ else
+ {
+ String src = null;
+ if ( project.getScm() != null )
+ {
+ src = project.getScm().getUrl();
+ }
+ this.setSource( src );
+ }
+
+ if ( ebi.getLicense() != null )
+ {
+ this.setLicense( ebi.getLicense() );
+ String lic = null;
+ List l = project.getLicenses();
+ Iterator it = l.iterator();
+ while ( it.hasNext() )
+ {
+ if ( it.next() != null )
+ {
+ m_logger.debug( "pom property override:<license> " + lic );
+ break;
+ }
+ }
+ }
+ else
+ {
+ String lic = null;
+ List l = project.getLicenses();
+ Iterator it = l.iterator();
+ while ( it.hasNext() )
+ {
+ lic = it.next() + ";";
+ }
+
+ this.setLicense( lic );
+ }
+
+ // create the first capability (ie : bundle)
+ Capability capability = new Capability();
+ capability.setName( "bundle" );
+ PElement p = new PElement();
+ p.setN( "manifestversion" );
+ p.setV( "2" );
+ capability.addP( p );
+
+ p = new PElement();
+ p.setN( "presentationname" );
+ p.setV( this.getPresentationName() );
+ capability.addP( p );
+
+ p = new PElement();
+ p.setN( "symbolicname" );
+ p.setV( this.getSymbolicName() );
+ capability.addP( p );
+
+ p = new PElement();
+ p.setN( "version" );
+ p.setT( "version" );
+ p.setV( this.getVersion() );
+ capability.addP( p );
+
+ this.addCapability( capability );
+
+ List capabilities = ( ArrayList ) ebi.getCapabilities();
+ for ( int i = 0; i < capabilities.size(); i++ )
+ {
+ this.addCapability( ( Capability ) capabilities.get( i ) );
+ }
+
+ List requirement = ( ArrayList ) ebi.getRequirement();
+ for ( int i = 0; i < requirement.size(); i++ )
+ {
+ this.addRequire( ( Require ) requirement.get( i ) );
+ }
+
+ // we also add the goupId
+ Category category = new Category();
+ category.setId( project.getGroupId() );
+ this.addCategory( category );
+
+ return true;
+ }
+
+
+ /**
+ * return if the bundle resource is complete.
+ * @return false if an information is missing, else true
+ */
+ public boolean isValid()
+ {
+ // we must verify required properties are present
+ return this.getPresentationName() != null && this.getSymbolicName() != null && this.getVersion() != null
+ && this.getUri() != null && this.getSize() != null;
+ }
+
+
+ /**
+ * test if this bundle has the same symbolicname, and version number.
+ * @param symbolicName symbolicName to compare with current bundle
+ * @param presentationName presentationName to compare with current bundlde
+ * @param version version to compare with current bundle
+ * @return true if the information are the same, else false
+ */
+ public boolean isSameBundleResource( String symbolicName, String version )
+ {
+ if ( this.isValid() )
+ {
+ return ( symbolicName.compareTo( this.getSymbolicName() ) == 0 )
+ && ( version.compareTo( this.getVersion() ) == 0 );
+ }
+ else
+ {
+ return false;
+ }
+
+ }
+
+
+ /**
+ * return a list of categories transformed to node.
+ * @param father father document to create node from same document
+ * @return List of Node
+ */
+ private List getNodeCategories( Document father )
+ {
+ List listNode = new ArrayList();
+ List listCategory = ( ArrayList ) this.getCategory();
+ for ( int i = 0; i < listCategory.size(); i++ )
+ {
+ listNode.add( ( ( Category ) listCategory.get( i ) ).getNode( father ) );
+ }
+ return listNode;
+ }
+
+
+ /**
+ * return a list of capabilities transformed to node.
+ * @param father father document to create node from same document
+ * @return List of Node
+ */
+ private List getNodeCapabilities( Document father )
+ {
+ List listNode = new ArrayList();
+ List listCapability = ( ArrayList ) this.getCapability();
+ for ( int i = 0; i < listCapability.size(); i++ )
+ {
+ listNode.add( ( ( Capability ) listCapability.get( i ) ).getNode( father ) );
+ }
+ return listNode;
+ }
+
+
+ /**
+ * return a list of requirement transformed to node.
+ * @param father father document to create node from same document
+ * @return List of Node.
+ */
+ private List getNodeRequirement( Document father )
+ {
+ List listNode = new ArrayList();
+ List listRequirement = ( ArrayList ) this.getRequire();
+ for ( int i = 0; i < listRequirement.size(); i++ )
+ {
+ listNode.add( ( ( Require ) listRequirement.get( i ) ).getNode( father ) );
+ }
+ return listNode;
+ }
+
+
+ /**
+ * return the list of properties not define in this bundle resource.
+ * @return list of properties not define
+ */
+ private String getInvalidProperties()
+ {
+ if ( this.isValid() )
+ {
+ if ( this.getId() == null )
+ {
+ return "id";
+ }
+ else
+ {
+ return "";
+ }
+ }
+ String result = "";
+ if ( this.getPresentationName() == null )
+ {
+ result = result + "presentationName;";
+ }
+ if ( this.getSymbolicName() == null )
+ {
+ result = result + "symbolicName;";
+ }
+ if ( this.getVersion() == null )
+ {
+ result = result + "version;";
+ }
+ if ( this.getUri() == null )
+ {
+ result = result + "Uri;";
+ }
+ if ( this.getSize() == null )
+ {
+ result = result + "Size";
+ }
+ return result;
+ }
+
+}