blob: 6a545ade30a09973946e6d5a3d4caa71dbebe9de [file] [log] [blame]
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed 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 jetbrains.antlayout.datatypes;
import jetbrains.antlayout.util.LayoutFileSet;
import jetbrains.antlayout.util.TempFileFactory;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.ant.types.PatternSet;
import java.io.File;
import java.util.Collections;
import java.util.List;
/**
* @author nik
*/
public class ExtractedDirContent extends Content {
private String jarPath;
private String pathInJar = "";
private Expand expandTask;
public ExtractedDirContent() {
expandTask = new Expand();
expandTask.setTaskName("unzip");
}
public void setJarPath(String jarPath) {
this.jarPath = jarPath;
}
public void setPathInJar(String pathInJar) {
this.pathInJar = pathInJar;
}
@Override
public List<LayoutFileSet> build(TempFileFactory temp) {
final File outputDir = temp.allocateTempFile("extractedDir");
expandTask.setProject(getProject());
expandTask.setSrc(new File(jarPath.replace('/', File.separatorChar)));
File target = outputDir;
if (!pathInJar.endsWith("/")) {
pathInJar += "/";
}
if (pathInJar.startsWith("/")) {
pathInJar = pathInJar.substring(1);
}
if (pathInJar.length() > 0) {
final PatternSet patternSet = new PatternSet();
patternSet.createInclude().setName(pathInJar + "**");
expandTask.addPatternset(patternSet);
target = new File(outputDir, pathInJar.replace('/', File.separatorChar));
}
expandTask.setDest(outputDir);
expandTask.perform();
final LayoutFileSet fileSet = new LayoutFileSet();
fileSet.setDir(target);
return Collections.singletonList(fileSet);
}
@Override
public void validateArguments() throws BuildException {
if (jarPath == null) {
throw new BuildException("jarPath attribute must be specified for extractedDir tag");
}
}
}