blob: e394fa066f06427188d1220525751a5d8f27c0fb [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.maven.plugin;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.eclipse.jetty.util.StringUtil;
/**
* OverlayConfig
*/
public class OverlayConfig
{
private String targetPath;
private String groupId;
private String artifactId;
private String classifier;
private List<String> includes;
private List<String> excludes;
private boolean skip;
private boolean filtered;
public OverlayConfig() {}
public OverlayConfig(String fmt, List<String> defaultIncludes, List<String> defaultExcludes)
{
if (fmt == null)
return;
String[] atoms = StringUtil.csvSplit(fmt);
for (int i=0;i<atoms.length;i++)
{
String s = atoms[i].trim();
switch (i)
{
case 0:
{
if (!"".equals(s))
groupId = s;
break;
}
case 1:
{
if (!"".equals(s))
artifactId = s;
break;
}
case 2:
{
if (!"".equals(s))
classifier = s;
break;
}
case 3:
{
if (!"".equals(s))
targetPath = s;
break;
}
case 4:
{
if ("".equals(s))
skip = false;
else
skip = Boolean.valueOf(s);
break;
}
case 5:
{
if ("".equals(s))
filtered = false;
else
filtered = Boolean.valueOf(s);
break;
}
case 6:
{
if ("".equals(s))
break;
String[] incs = s.split(";");
if (incs.length > 0)
includes = Arrays.asList(incs);
break;
}
case 7:
{
if ("".equals(s))
break;
String[] exs = s.split(";");
if (exs.length > 0)
excludes = Arrays.asList(exs);
break;
}
}
}
}
public OverlayConfig(Xpp3Dom root, List<String> defaultIncludes, List<String> defaultExcludes)
{
Xpp3Dom node = root.getChild("groupId");
setGroupId(node==null?null:node.getValue());
node = root.getChild("artifactId");
setArtifactId(node==null?null:node.getValue());
node = root.getChild("classifier");
setClassifier(node==null?null:node.getValue());
node = root.getChild("targetPath");
setTargetPath(node==null?null:node.getValue());
node = root.getChild("skip");
setSkip(node==null?false:Boolean.valueOf(node.getValue()));
node = root.getChild("filtered");
setFiltered(node==null?false:Boolean.valueOf(node.getValue()));
node = root.getChild("includes");
List<String> includes = null;
if (node != null && node.getChildCount() > 0)
{
Xpp3Dom[] list = node.getChildren("include");
for (int j=0; list != null && j < list.length;j++)
{
if (includes == null)
includes = new ArrayList<String>();
includes.add(list[j].getValue());
}
}
if (includes == null && defaultIncludes != null)
{
includes = new ArrayList<String>();
includes.addAll(defaultIncludes);
}
setIncludes(includes);
node = root.getChild("excludes");
List<String> excludes = null;
if (node != null && node.getChildCount() > 0)
{
Xpp3Dom[] list = node.getChildren("exclude");
for (int j=0; list != null && j < list.length;j++)
{
if (excludes == null)
excludes = new ArrayList<String>();
excludes.add(list[j].getValue());
}
}
if (excludes == null && defaultExcludes != null)
{
excludes = new ArrayList<String>();
excludes.addAll(defaultExcludes);
}
setExcludes(excludes);
}
public String getTargetPath()
{
return targetPath;
}
public void setTargetPath(String targetPath)
{
this.targetPath = targetPath;
}
public String getGroupId()
{
return groupId;
}
public void setGroupId(String groupId)
{
this.groupId = groupId;
}
public String getArtifactId()
{
return artifactId;
}
public void setArtifactId(String artifactId)
{
this.artifactId = artifactId;
}
public String getClassifier()
{
return classifier;
}
public void setClassifier(String classifier)
{
this.classifier = classifier;
}
public List<String> getIncludes()
{
return includes;
}
public void setIncludes(List<String> includes)
{
this.includes = includes;
}
public List<String> getExcludes()
{
return excludes;
}
public void setExcludes(List<String> excludes)
{
this.excludes = excludes;
}
public boolean isSkip()
{
return skip;
}
public void setSkip(boolean skip)
{
this.skip = skip;
}
public boolean isFiltered()
{
return filtered;
}
public void setFiltered(boolean filtered)
{
this.filtered = filtered;
}
public boolean isCurrentProject()
{
if (this.groupId == null && this.artifactId == null)
return true;
return false;
}
/**
* Check if this overlay configuration matches an Artifact's info
*
* @param gid Artifact groupId
* @param aid Artifact artifactId
* @param cls Artifact classifier
* @return true if matched
*/
public boolean matchesArtifact (String gid, String aid, String cls)
{
if (((getGroupId() == null && gid == null) || (getGroupId() != null && getGroupId().equals(gid)))
&&((getArtifactId() == null && aid == null) || (getArtifactId() != null && getArtifactId().equals(aid)))
&&((getClassifier() == null) || (getClassifier().equals(cls))))
return true;
return false;
}
/**
* Check if this overlay configuration matches an Artifact's info
*
* @param gid the group id
* @param aid the artifact id
* @return true if matched
*/
public boolean matchesArtifact (String gid, String aid)
{
if (((getGroupId() == null && gid == null) || (getGroupId() != null && getGroupId().equals(gid)))
&&((getArtifactId() == null && aid == null) || (getArtifactId() != null && getArtifactId().equals(aid))))
return true;
return false;
}
public String toString()
{
StringBuffer strbuff = new StringBuffer();
strbuff.append((groupId != null ? groupId : "")+",");
strbuff.append((artifactId != null ? artifactId : "")+",");
strbuff.append((classifier != null ? classifier : "")+",");
strbuff.append((targetPath != null ? targetPath : "")+",");
strbuff.append(""+skip+",");
strbuff.append(""+filtered+",");
if (includes != null)
{
Iterator<String> itor = includes.iterator();
while (itor.hasNext())
{
strbuff.append(itor.next());
if (itor.hasNext())
strbuff.append(";");
}
}
strbuff.append(", ");
if (excludes != null)
{
Iterator<String> itor = excludes.iterator();
while (itor.hasNext())
{
strbuff.append(itor.next());
if (itor.hasNext())
strbuff.append(";");
}
}
return strbuff.toString();
}
}