// // ======================================================================== // 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(); } }