Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   /*
    *  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.myfaces.trinidadbuild.plugin.jdeveloper;
  
  import java.io.File;
  import java.io.Reader;
  import java.net.URL;
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
  import java.util.TreeMap;
  

Version:
$Id$
Goal:
jdev
Execute:
phase=process-resources
RequiresDependencyResolution:
test
Description:
Goal which generates the JDeveloper Workspace
  
  public class JDeveloperMojo extends AbstractMojo
  {
  

Parameter:
  
    private String[] libraries;

  

Parameter:
  
    private File[] sourceRoots;

  

Parameter:
  
    private File[] testSourceRoots;

  

Parameter:
  
    private File[] resourceRoots;

  

Parameter:
  
    private File[] testResourceRoots;

  

Parameter:
expression="${force}"
  
    private boolean force;

  

Parameter:
expression="10.1.3.0.4"
Required:
Readonly:
 
   private String release;

  

Parameter:
expression="${project}"
Required:
Readonly:
 
   private MavenProject project;

  

Parameter:
expression="${reactorProjects}"
Required:
Readonly:
 
   private List reactorProjects;

  
Execute the Mojo.
 
   public void execute() throws MojoExecutionException
   {
     try
     {
       generateWorkspace();
       generateProject();
       generateTestProject();
     }
     catch (IOException e)
     {
       throw new MojoExecutionException(e.getMessage());
     }
   }
 
   private void generateWorkspace() throws MojoExecutionExceptionIOException
   {
     {
       getLog().info("Generating JDeveloper " +  +
                     " workspace: " + .getArtifactId());
 
       File workspaceFile = getJWorkspaceFile();
 
       try
       {
         Xpp3Dom workspaceDOM = readWorkspaceDOM(workspaceFile);
         replaceProjects(workspaceFile.getParentFile(), workspaceDOM);
         writeDOM(workspaceFileworkspaceDOM);
       }
       catch (XmlPullParserException e)
       {
         throw new MojoExecutionException("Error generating project"e);
       }
     }
   }
 
   private void generateProject() throws IOExceptionMojoExecutionException
   {
     if (!"pom".equals(.getPackaging()))
     {
       File projectFile = getJProjectFile();
       // TODO: read configuration for war:war goal
       File webappDir = new File(.getBasedir(), "src/main/webapp");
       // TODO: read configuration for compiler:complie goal
       File outputDir = new File(.getBuild().getDirectory(), "classes");
 
       MavenProject executionProject = .getExecutionProject();
       List compileSourceRoots = executionProject.getCompileSourceRoots();
       if ( != null)
       {
         for (int i=0; i < .i++)
         {
           compileSourceRoots.add([i].getAbsolutePath());
         }
       }
 
       List compileResourceRoots = executionProject.getResources();
       if ( != null)
       {
         for (int i=0; i < .i++)
         {
           Resource resource = new Resource();
           resource.setDirectory([i].getAbsolutePath());
           compileResourceRoots.add(resource);
         }
       }
 
       getLog().info("Generating JDeveloper " +  +
                     " Project " + .getArtifactId());
 
       // Note: include "compile", "provided", "system" and "runtime" scopes
       Set compileArtifacts = new LinkedHashSet();
       compileArtifacts.addAll(.getCompileArtifacts());
       compileArtifacts.addAll(.getRuntimeArtifacts());
 
       // Note: separate "runtime" vs. "compile" dependencies in JDeveloper?
       generateProject(projectFile,
                       .getArtifactId(),
                       .getPackaging(),
                       .getDependencies(),
                       new ArrayList(compileArtifacts),
                       compileSourceRoots,
                       compileResourceRoots,
                       Collections.singletonList(webappDir.getPath()),
                       outputDir);
     }
   }
 
   {
     if (!"pom".equals(.getPackaging()))
     {
       File projectFile = getJProjectTestFile();
       File webappDir = new File(.getBasedir(), "src/test/webapp");
       // TODO: read configuration for compiler:testCompile goal
       File outputDir = new File(.getBuild().getDirectory(), "test-classes");
 
       // self dependency needed for test project
       List testDependencies = new ArrayList(.getTestDependencies());
       Dependency selfDependency = new Dependency();
       selfDependency.setArtifactId(.getArtifactId());
       selfDependency.setGroupId(.getGroupId());
       selfDependency.setType(.getPackaging());
       testDependencies.add(selfDependency);
 
       MavenProject executionProject = .getExecutionProject();
       List compileSourceRoots = executionProject.getTestCompileSourceRoots();
       if ( != null)
       {
         for (int i=0; i < .i++)
         {
           compileSourceRoots.add([i].getAbsolutePath());
         }
       }
 
       List compileResourceRoots = executionProject.getTestResources();
       if ( != null)
       {
         for (int i=0; i < .i++)
         {
           Resource resource = new Resource();
           resource.setDirectory([i].getAbsolutePath());
           compileResourceRoots.add(resource);
         }
       }
 
       getLog().info("Generating JDeveloper " +  +
                     " Project " + .getArtifactId() + "-test");
 
       // Note: all artifacts implicitly included in "test" scope
       generateProject(projectFile,
                       .getArtifactId() + "-test",
                       .getPackaging(),
                       testDependencies,
                       .getTestArtifacts(),
                       compileSourceRoots,
                       compileResourceRoots,
                       Collections.singletonList(webappDir.getPath()),
                       outputDir);
     }
   }
 
   private void generateProject(
     File   projectFile,
     String projectName,
     String packaging,
     List   dependencies,
     List   artifacts,
     List   sourceRoots,
     List   resourceRoots,
     List   webSourceRoots,
     File   outputDirthrows IOExceptionMojoExecutionException
   {
     try
     {
       File projectDir = projectFile.getParentFile();
       Xpp3Dom projectDOM = readProjectDOM(projectFile);
       replaceWebappInfo(projectNameprojectDOM);
       replaceSourcePaths(projectDirsourceRootsresourceRootsprojectDOM);
       //replaceResourcePaths(projectDir, resourceRoots, projectDOM);
       replaceWebSourcePaths(projectDirwebSourceRootsprojectDOM);
       replaceDependencies(projectDirdependenciesprojectDOM);
       replaceLibraries(projectDirartifactsprojectDOM);
       replaceOutputDirectory(projectDiroutputDirprojectDOM);
       writeDOM(projectFileprojectDOM);
 
       if ("war".equals(packaging))
         copyTagLibraries(projectDirdependenciesartifacts);
     }
     catch (XmlPullParserException e)
     {
       throw new MojoExecutionException("Error generating project"e);
     }
   }
 
   private void replaceProjects(
     File    workspaceDir,
     Xpp3Dom workspaceDOMthrows XmlPullParserException
   {
     // /jws:workspace
     //   /list[@n="listOfChildren"]
     Xpp3Dom sourceDOM = workspaceDOM.getChild("list");
 
     // <hash>
     //   <value n="nodeClass" v="oracle.jdeveloper.model.JProject"/>
     //   <url n="URL" path="[workspace-relative-path-to-project.jpr]"/>
     // </hash>
     Xpp3Dom targetDOM = new Xpp3Dom("list");
 
     for (Iterator i = .getCollectedProjects().iterator(); i.hasNext();)
     {
       MavenProject collectedProject = (MavenProject)i.next();
 
       File projectFile = getJProjectFile(collectedProject);
       targetDOM.addChild(createProjectReferenceDOM(workspaceDirprojectFile));
 
       File testProjectFile = getJProjectTestFile(collectedProject);
       targetDOM.addChild(createProjectReferenceDOM(workspaceDirtestProjectFile));
     }
 
     // TODO: use a better merge algorithm
     removeChildren(sourceDOM);
 
     // make sure to pass Boolean.FALSE to allow
     // multiple child elements with the same name
     Xpp3Dom.mergeXpp3Dom(sourceDOMtargetDOM.);
   }
 
   private void replaceWebSourcePaths(
     File    projectDir,
     List    sourceRoots,
     Xpp3Dom projectDOMthrows XmlPullParserException
   {
     // /jpr:project
     //   /hash[@n="oracle.jdeveloper.model.J2eeSettings"]
     //     /hash[@n="webContentSet"]
     //       /list[@n="url-path"]
     Xpp3Dom pathsDOM =
       findNamedChild(projectDOM"hash""oracle.jdeveloper.model.J2eeSettings");
     Xpp3Dom contentSetDOM =
       findNamedChild(pathsDOM"hash""webContentSet");
     Xpp3Dom sourceDOM =
       findNamedChild(contentSetDOM"list""url-path");
 
     //
     // <url path="[relative-path-to-source-root]" />
     //
     Xpp3Dom targetDOM = new Xpp3Dom("list");
     for (Iterator i = sourceRoots.iterator(); i.hasNext();)
     {
       File sourceRoot = new File((String)i.next());
       String relativeRoot = getRelativeDir(projectDirsourceRoot);
       Xpp3Dom urlDOM = new Xpp3Dom("url");
       urlDOM.setAttribute("path"relativeRoot);
       targetDOM.addChild(urlDOM);
     }
 
     // TODO: use a better merge algorithm
     removeChildren(sourceDOM);
 
     // make sure to pass Boolean.FALSE to allow
     // multiple child elements with the same name
     Xpp3Dom.mergeXpp3Dom(sourceDOMtargetDOM.);
   }
 
   private void replaceWebappInfo(
     String  projectName,
     Xpp3Dom projectDOMthrows XmlPullParserException
   {
     // /jpr:project
     //   /hash[@n="oracle.jdeveloper.model.J2eeSettings"]
     //     /value[@n="j2eeWebAppName" v="maven-generated-webapp"]
     //     /value[@n="j2eeWebContextRoot" v="maven-generated-context-root"]
      Xpp3Dom settingsDOM =
        findNamedChild(projectDOM"hash""oracle.jdeveloper.model.J2eeSettings");
     Xpp3Dom webappNameDOM =
       findNamedChild(settingsDOM"value""j2eeWebAppName");
     Xpp3Dom webappContextDOM =
       findNamedChild(settingsDOM"value""j2eeWebContextRoot");
 
     // update the webapp name
     webappNameDOM.setAttribute("v"projectName + "-webapp");
 
     // update the webapp context root
     webappContextDOM.setAttribute("v"projectName + "-context-root");
   }
 
   private void replaceSourcePaths(
     File    projectDir,
     List    sourceRoots,
     List    resourceRoots,
     Xpp3Dom projectDOMthrows XmlPullParserException
   {
     // /jpr:project
     //   /hash[@n="oracle.jdeveloper.model.PathsConfiguration"]
     //     /hash[@n="javaContentSet"]
     //       /list[@n="url-path"]
     Xpp3Dom pathsDOM =
       findNamedChild(projectDOM"hash""oracle.jdeveloper.model.PathsConfiguration");
     Xpp3Dom contentSetDOM =
       findNamedChild(pathsDOM"hash""javaContentSet");
     Xpp3Dom sourceDOM =
       findNamedChild(contentSetDOM"list""url-path");
 
     //
     // <url path="[relative-path-to-source-root]" />
     //
     Xpp3Dom targetDOM = new Xpp3Dom("list");
     Collections.sort(sourceRoots);
     for (Iterator i = sourceRoots.iterator(); i.hasNext();)
     {
       File sourceRoot = new File((String)i.next());
       String relativeRoot = getRelativeDir(projectDirsourceRoot);
       Xpp3Dom urlDOM = new Xpp3Dom("url");
       urlDOM.setAttribute("path"relativeRoot);
       targetDOM.addChild(urlDOM);
     }
 
     // TODO: get bug fixed in 10.1.3 for copying resources
     Collections.sort(resourceRootsnew Comparator()
     {
       public int compare(Object aObject b)
       {
         Resource ra = (Resource)a;
         Resource rb = (Resource)b;
         return ra.getDirectory().compareTo(rb.getDirectory());
       }
 
     });
     for (Iterator i = resourceRoots.iterator(); i.hasNext();)
     {
       Resource resource = (Resource)i.next();
       File resourceRoot = new File(resource.getDirectory());
       String relativeRoot = getRelativeDir(projectDirresourceRoot);
       Xpp3Dom urlDOM = new Xpp3Dom("url");
       urlDOM.setAttribute("path"relativeRoot);
       targetDOM.addChild(urlDOM);
     }
 
     // TODO: use a better merge algorithm
     removeChildren(sourceDOM);
 
     // make sure to pass Boolean.FALSE to allow
     // multiple child elements with the same name
     Xpp3Dom.mergeXpp3Dom(sourceDOMtargetDOM.);
   }
 
   private void replaceResourcePaths(
     File    projectDir,
     List    resourceRoots,
     Xpp3Dom projectDOMthrows XmlPullParserException
   {
     // /jpr:project
     //   /hash[@n="oracle.ide.model.ResourcePaths"]
     //     /hash[@n="resourcesContentSet"]
     //       /list[@n="url-path"]
 
     Xpp3Dom pathsDOM =
       findNamedChild(projectDOM"hash""oracle.ide.model.ResourcePaths");
     Xpp3Dom contentSetDOM =
       findNamedChild(pathsDOM"hash""resourcesContentSet");
     Xpp3Dom sourceDOM =
       findNamedChild(contentSetDOM"list""url-path");
 
     //
     // <url path="[relative-path-to-source-root]" />
     //
     Xpp3Dom targetDOM = new Xpp3Dom("list");
     for (Iterator i = resourceRoots.iterator(); i.hasNext();)
     {
       Resource resource = (Resource)i.next();
       File resourceRoot = new File(resource.getDirectory());
       String relativeRoot = getRelativeDir(projectDirresourceRoot);
       Xpp3Dom urlDOM = new Xpp3Dom("url");
       urlDOM.setAttribute("path"relativeRoot);
       targetDOM.addChild(urlDOM);
     }
 
     // TODO: use a better merge algorithm
     removeChildren(sourceDOM);
 
     // make sure to pass Boolean.FALSE to allow
     // multiple child elements with the same name
     Xpp3Dom.mergeXpp3Dom(sourceDOMtargetDOM.);
   }
 
   private void replaceDependencies(
     File    projectDir,
     List    dependencies,
     Xpp3Dom projectDOMthrows XmlPullParserException
   {
     // /jpr:project
     //   /hash[@n="oracle.ide.model.DependencyConfiguration"]
     //     /list[@n="dependencyList"]
     Xpp3Dom configDOM =
       findNamedChild(projectDOM"hash""oracle.ide.model.DependencyConfiguration");
     Xpp3Dom sourceDOM =
       findNamedChild(configDOM"list""dependencyList");
 
     Xpp3Dom targetDOM = new Xpp3Dom("list");
     for (Iterator i = dependencies.iterator(); i.hasNext();)
     {
       Dependency dependency = (Dependency)i.next();
       MavenProject dependentProject = findDependentProject(dependency.getManagementKey());
       if (dependentProject != null)
       {
         File dependentProjectFile = getJProjectFile(dependentProject);
         String relativePath = getRelativeFile(projectDirdependentProjectFile);
 
         Xpp3Dom hashDOM = new Xpp3Dom("hash");
         Xpp3Dom valueDOM = new Xpp3Dom("value");
         valueDOM.setAttribute("n""class");
         valueDOM.setAttribute("v""oracle.jdeveloper.library.ProjectLibrary");
         Xpp3Dom urlDOM = new Xpp3Dom("url");
         urlDOM.setAttribute("n""sourceURL");
         urlDOM.setAttribute("path"relativePath);
         hashDOM.addChild(valueDOM);
         hashDOM.addChild(urlDOM);
         targetDOM.addChild(hashDOM);
       }
     }
 
     // TODO: use a better merge algorithm
     removeChildren(sourceDOM);
 
     // make sure to pass Boolean.FALSE to allow
     // multiple child elements with the same name
     Xpp3Dom.mergeXpp3Dom(sourceDOMtargetDOM.);
   }
 
   private void replaceLibraries(
     File    projectDir,
     List    artifacts,
     Xpp3Dom projectDOMthrows XmlPullParserException
   {
     // /jpr:project
     //   /hash[@n="oracle.jdevimpl.config.JProjectLibraries"]
     //     /hash[@n="internalDefinitions"]
     //       /list[@n="libraryDefinitions"]
     Xpp3Dom projectLibsDOM =
       findNamedChild(projectDOM"hash""oracle.jdevimpl.config.JProjectLibraries");
     Xpp3Dom internalDefsDOM =
       findNamedChild(projectLibsDOM"hash""internalDefinitions");
     Xpp3Dom sourceDefsDOM =
       findNamedChild(internalDefsDOM"list""libraryDefinitions");
 
     // /jpr:project
     //   /hash[@n="oracle.jdevimpl.config.JProjectLibraries"]
     //     /list[@n="libraryReferences"]
     Xpp3Dom sourceRefsDOM =
       findNamedChild(projectLibsDOM"list""libraryReferences");
 
     Xpp3Dom targetDefsDOM = new Xpp3Dom("list");
     Xpp3Dom targetRefsDOM = new Xpp3Dom("list");
 
     //
     // libraryDefinitions
     //
     // <hash>
     //   <list n="classPath">
     //     <url path="[path-to-artifact]" jar-entry="" />
     //   </list>
     //   <value n="deployedByDefault" v="true"/>
     //   <value n="description" v="[artifact.id]"/>
     //   <value n="id" v="[artifact.id]"/>
     // </hash>
     //
 
      // sort the artifacts
      Collections.sort(artifactsnew Comparator() {
        public int compare(Object aObject b)
        {
          Artifact arta = (Artifact)a;
          Artifact artb = (Artifact)b;
          return arta.getId().compareTo(artb.getId());
        }
 
      });
 
     List libraryRefs = new LinkedList();
     for (Iterator i = artifacts.iterator(); i.hasNext();)
     {
       Artifact artifact = (Artifact)i.next();
       if (!isDependentProject(artifact.getDependencyConflictId()))
       {
         String id = artifact.getId();
         String path = getRelativeFile(projectDirartifact.getFile());
 
         // libraryReferences entry
         Xpp3Dom hashDOM = new Xpp3Dom("hash");
         Xpp3Dom listDOM = new Xpp3Dom("list");
         listDOM.setAttribute("n""classPath");
 
         Xpp3Dom urlDOM = new Xpp3Dom("url");
         urlDOM.setAttribute("path"path);
         urlDOM.setAttribute("jar-entry""");
         listDOM.addChild(urlDOM);
         hashDOM.addChild(listDOM);
 
         Xpp3Dom valueDOM = new Xpp3Dom("value");
         valueDOM.setAttribute("n""deployedByDefault");
         valueDOM.setAttribute("v""true");
         hashDOM.addChild(valueDOM);
 
         valueDOM = new Xpp3Dom("value");
         valueDOM.setAttribute("n""description");
         valueDOM.setAttribute("v"id);
         hashDOM.addChild(valueDOM);
 
         valueDOM = new Xpp3Dom("value");
         valueDOM.setAttribute("n""id");
         valueDOM.setAttribute("v"id);
         hashDOM.addChild(valueDOM);
         targetDefsDOM.addChild(hashDOM);
 
         libraryRefs.add(id);
       }
     }
 
     // add manually defined libraries
     if ( != null)
     {
       for (int i=0; i < .i++)
       {
         libraryRefs.add(0, [i]);
       }
     }
 
     //
     // libraryReferences
     //
     // <hash>
     //   <value n="id" v="[artifact.id]"/>
     //   <value n="isJDK" v="false"/>
     // </hash>
     //
     Collections.sort(libraryRefs);
     for (Iterator i = libraryRefs.iterator(); i.hasNext();)
     {
       String id = (String)i.next();
 
       // libraryDefinitions entry
       Xpp3Dom hashDOM = new Xpp3Dom("hash");
 
       Xpp3Dom valueDOM = new Xpp3Dom("value");
       valueDOM.setAttribute("n""id");
       valueDOM.setAttribute("v"id);
       hashDOM.addChild(valueDOM);
 
       valueDOM = new Xpp3Dom("value");
       valueDOM.setAttribute("n""isJDK");
       valueDOM.setAttribute("v""false");
       hashDOM.addChild(valueDOM);
       targetRefsDOM.addChild(hashDOM);
     }
 
     // First, add JSP Runtime dependency if src/main/webapp exists
     // TODO: use a better merge algorithm
     removeChildren(sourceDefsDOM);
     removeChildren(sourceRefsDOM);
 
     // make sure to pass Boolean.FALSE to allow
     // multiple child elements with the same name
     Xpp3Dom.mergeXpp3Dom(sourceDefsDOMtargetDefsDOM.);
     Xpp3Dom.mergeXpp3Dom(sourceRefsDOMtargetRefsDOM.);
   }
 
   private void copyTagLibraries(
     File projectDir,
     List dependencies,
     List artifactsthrows IOException
   {
     File targetDir = new File(projectDir"src/main/webapp/WEB-INF");
 
     for (Iterator i = dependencies.iterator(); i.hasNext();)
     {
       Dependency dependency = (Dependency)i.next();
       MavenProject dependentProject = findDependentProject(dependency.getManagementKey());
       if (dependentProject != null)
       {
         List resourceRoots = dependentProject.getResources();
         for (Iterator j = resourceRoots.iterator(); j.hasNext();)
         {
           Resource resource = (Resource)j.next();
           String resourceRoot = resource.getDirectory();
           File resourceDirectory = new File(resourceRoot);
           if (resourceDirectory.exists())
           {
             DirectoryScanner scanner = new DirectoryScanner();
             scanner.setBasedir(resourceRoot);
             scanner.addDefaultExcludes();
             scanner.setIncludes(new String[] { "META-INF/*.tld" });
             scanner.scan();
 
             String[] tldFiles = scanner.getIncludedFiles();
             for (int k=0; k < tldFiles.lengthk++)
             {
               File sourceFile = new File(resourceDirectorytldFiles[k]);
               File targetFile = new File(targetDirsourceFile.getName());
 
               if (targetFile.exists())
                 targetFile.delete();
               FileUtils.copyFile(sourceFiletargetFile);
             }
           }
         }
       }
     }
 
 
     Map sourceMap = new TreeMap();
 
     for (Iterator i = artifacts.iterator(); i.hasNext();)
     {
       Artifact artifact = (Artifact)i.next();
       if (!isDependentProject(artifact.getDependencyConflictId()) &&
           "jar".equals(artifact.getType()))
       {
         File file = artifact.getFile();
         JarFile jarFile = new JarFile(file);
         Enumeration jarEntries = jarFile.entries();
         while (jarEntries.hasMoreElements())
         {
           JarEntry jarEntry = (JarEntry)jarEntries.nextElement();
           String name = jarEntry.getName();
           if (name.startsWith("META-INF/") && name.endsWith(".tld"))
           {
              List taglibs = (ListsourceMap.get(name);
              if (taglibs == null)
              {
                 taglibs = new ArrayList();
                 sourceMap.put(nametaglibs);
              }
 
              taglibs.add(file);
           }
         }
       }
     }
 
     for (Iterator i = sourceMap.entrySet().iterator(); i.hasNext();)
     {
       Map.Entry e = (Map.Entryi.next();
       List taglibs = (Liste.getValue();
       String name = (Stringe.getKey();
       
       for (Iterator ti = taglibs.iterator(); ti.hasNext();)
       {
         File file = (Fileti.next();
         File sourceFile = new File(name);
         StringBuffer buff = new StringBuffer(sourceFile.getName());
         if (taglibs.size() > 1)
         {
           String jarName = file.getName().substring(0, file.getName().length() - ".jar".length());
           buff.insert(buff.length() - ".tld".length(), "-" + jarName);
         }
 
         URL jarURL = file.toURL();
         URL sourceURL = new URL("jar:" + jarURL.toExternalForm() + "!/" + name);
         File targetFile = new File(targetDirbuff.toString());
         if (targetFile.exists())
           targetFile.delete();
         FileUtils.copyURLToFile(sourceURLtargetFile);
         targetFile.setReadOnly();
       }
     }
   }
   
   private void replaceOutputDirectory(
     File    projectDir,
     File    outputDir,
     Xpp3Dom projectDOMthrows XmlPullParserException
   {
     // /jpr:project
     //   /hash[@n="oracle.jdevimpl.config.JProjectPaths"]
     //       /url[@n="outputDirectory"]
 
     Xpp3Dom projectPathsDOM =
       findNamedChild(projectDOM"hash""oracle.jdevimpl.config.JProjectPaths");
     Xpp3Dom sourceDOM =
       findNamedChild(projectPathsDOM"url""outputDirectory");
 
     //
     // <url path="[relative-path-to-output-dir]" />
     //
     sourceDOM.setAttribute("path"getRelativeDir(projectDiroutputDir));
   }

  
Returns the JDeveloper project file for a Maven POM.

Parameters:
project the Maven POM
Returns:
the JDeveloper project file
 
   private File getJProjectFile(
     MavenProject project)
   {
     String jprName = project.getArtifactId() + ".jpr";
     return new File(project.getBasedir(), jprName);
   }

  
Returns the JDeveloper test project file for a Maven POM.

Parameters:
project the Maven POM
Returns:
the JDeveloper test project file
 
   private File getJProjectTestFile(
     MavenProject project)
   {
     String jprName = project.getArtifactId() + "-test.jpr";
     return new File(project.getBasedir(), jprName);
   }

  
Returns the JDeveloper workspace file for a Maven POM.

Parameters:
project the Maven POM
Returns:
the JDeveloper workspace file
 
   private File getJWorkspaceFile(
     MavenProject project)
   {
     String jwsName = project.getArtifactId() + ".jws";
     return new File(project.getBasedir(), jwsName);
   }

  
Reads a JDeveloper workspace file into DOM.

Parameters:
workspaceFile the JDeveloper workspace file
Returns:
the parsed DOM
 
   private Xpp3Dom readWorkspaceDOM(
     File workspaceFilethrows IOExceptionXmlPullParserException
   {
     return readDOM(workspaceFile + "/workspace.xml");
   }

  
Reads a JDeveloper project file into DOM.

Parameters:
projectFile the JDeveloper project file
Returns:
the parsed DOM
 
   private Xpp3Dom readProjectDOM(
     File projectFilethrows IOExceptionXmlPullParserException
   {
     return readDOM(projectFile + "/project.xml");
   }

  
Reads a source file into DOM, defaulting to a packaged resource if the source file does not already exist.

Parameters:
sourceFile the source file to be parsed
resourcePath the default packaged resource
Returns:
the parsed DOM
 
   private Xpp3Dom readDOM(
     File   sourceFile,
     String resourcePaththrows IOExceptionXmlPullParserException
   {
     Reader reader = null;
     try
     {
       if (! && sourceFile.exists())
       {
         // parse the existing source file
         reader = new FileReader(sourceFile);
       }
       else
       {
         // parse the default resource file
         URL resource = getClass().getResource(resourcePath);
 
         // ensure that the resourcePath can be found
         if (resource == null)
           throw new IOException("Unable to read resource: " + resourcePath);
 
         reader = new InputStreamReader(resource.openStream());
       }
       return Xpp3DomBuilder.build(reader);
     }
     finally
     {
       IOUtil.close(reader);
     }
   }

  
Writes a XML DOM to the target file.

Parameters:
targetFile the target file
sourceDOM the source DOM
 
   private void writeDOM(
     File    targetFile,
     Xpp3Dom sourceDOMthrows IOExceptionXmlPullParserException
   {
     FileWriter writer = null;
     try
     {
       writer = new FileWriter(targetFile);
       Xpp3DomWriter.write(writersourceDOM);
     }
     finally
     {
       IOUtil.close(writer);
     }
   }
 
   private String getRelativeDir(
     File source,
     File target)
   {
     return getRelativePath(sourcetargettrue);
   }
 
   private String getRelativeFile(
     File source,
     File target)
   {
     return getRelativePath(sourcetargetfalse);
   }

  
Returns the relative path between two files.

Parameters:
source the source file
target the target file
Returns:
the relative path between two files
 
   private String getRelativePath(
     File    source,
     File    target,
     boolean isDirectory)
   {
     String sourcePath = source.getAbsolutePath();
     String targetPath = target.getAbsolutePath();
 
     if (targetPath.startsWith(sourcePath + .))
     {
       String relativePath = targetPath.substring(sourcePath.length() + 1);
       relativePath = relativePath.replace(.'/');
       if (isDirectory)
         relativePath += "/";
       return relativePath;
     }
     else
     {
       String[] sourcePaths = sourcePath.split("\\" + .);
       String[] targetPaths = targetPath.split("\\" + .);
 
       // On Windows, the first element in the absolute path is a drive letter
       if(System.getProperty("os.name").startsWith("Windows"))
       {
         // uppercase the drive letter because Cygwin sometimes delivers
         // a lowercase drive letter
         sourcePaths[0] = sourcePaths[0].toUpperCase();
         targetPaths[0] = targetPaths[0].toUpperCase();
       }
 
       int sourcePathCount = sourcePaths.length;
       int targetPathCount = targetPaths.length;
       int commonPathCount = 0;
 
       int minPathCount = Math.min(sourcePathCounttargetPathCount);
       for (int i=0; i < minPathCounti++)
       {
         if (sourcePaths[i].equals(targetPaths[i]))
           commonPathCount++;
       }
 
       if (commonPathCount > 0)
       {
         int sourceRelativePathCount = sourcePathCount - commonPathCount;
         int targetRelativePathCount = targetPathCount - commonPathCount;
 
         int relativePathCount = sourceRelativePathCount + targetRelativePathCount;
         String[] relativePaths = new String[relativePathCount];
 
         for (int i=0; i < sourceRelativePathCounti++)
         {
           relativePaths[i] = "..";
         }
 
         for (int i=0; i < targetRelativePathCounti++)
         {
           relativePaths[sourceRelativePathCount + i] = targetPaths[commonPathCount + i];
         }
 
         // join
        StringBuffer relativePath = new StringBuffer();
        for (int i=0; i < relativePathCounti++)
        {
          if (i > 0)
            relativePath.append("/");
          relativePath.append(relativePaths[i]);
        }
        return relativePath.toString();
      }
      else
      {
        return targetPath;
      }
    }
  }
    Xpp3Dom parent,
    String  childName,
    String  attrValue)
  {
    Xpp3Dom[] hash = parent.getChildren(childName);
    for (int i=0; i < hash.lengthi++)
    {
      if (attrValue.equals(hash[i].getAttribute("n")))
        return hash[i];
    }
    Xpp3Dom child = new Xpp3Dom(childName);
    child.setAttribute("n"attrValue);
    parent.addChild(child);
    return child;
  }
    String dependencyManagementKey)
  {
    for (Iterator i=.iterator(); i.hasNext(); )
    {
      MavenProject reactorProject = (MavenProject)i.next();
      String ident = reactorProject.getArtifact().getDependencyConflictId();
      if (ident.equals(dependencyManagementKey))
        return reactorProject.getExecutionProject();
    }
    return null;
  }
  private boolean isDependentProject(
    String dependencyManagementKey)
  {
    return (findDependentProject(dependencyManagementKey) != null);
  }
  private void removeChildren(
    Xpp3Dom parent)
  {
    while (parent.getChildCount() != 0)
      parent.removeChild(0);
  }
    File workspaceDir,
    File projectFile)
  {
    Xpp3Dom hashDOM = new Xpp3Dom("hash");
    Xpp3Dom valueDOM = new Xpp3Dom("value");
    valueDOM.setAttribute("n""nodeClass");
    valueDOM.setAttribute("v""oracle.jdeveloper.model.JProject");
    Xpp3Dom urlDOM = new Xpp3Dom("url");
    urlDOM.setAttribute("n""URL");
    urlDOM.setAttribute("path"getRelativeFile(workspaceDirprojectFile));
    hashDOM.addChild(valueDOM);
    hashDOM.addChild(urlDOM);
    return hashDOM;
  }
New to GrepCode? Check out our FAQ X