Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* IzPack - Copyright 2001-2012 Julien Ponge, All Rights Reserved.
*
* http://izpack.org/
* http://izpack.codehaus.org/
*
* 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 com.izforge.izpack.compiler.resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import com.izforge.izpack.api.adaptator.IXMLElement;
import com.izforge.izpack.api.adaptator.IXMLParser;
import com.izforge.izpack.api.adaptator.impl.XMLParser;
import com.izforge.izpack.api.exception.CompilerException;
import com.izforge.izpack.compiler.data.CompilerData;
import com.izforge.izpack.compiler.data.PropertyManager;
import com.izforge.izpack.compiler.helper.AssertionHelper;
import com.izforge.izpack.compiler.helper.XmlCompilerHelper;
/**
* @author Anthonin Bonnefoy
*/
public class ResourceFinder
{
private AssertionHelper assertionHelper;
private CompilerData compilerData;
private PropertyManager propertyManager;
private XmlCompilerHelper xmlCompilerHelper;
public ResourceFinder(AssertionHelper assertionHelper, CompilerData compilerData, PropertyManager propertyManager,
XmlCompilerHelper xmlCompilerHelper)
{
this.assertionHelper = assertionHelper;
this.compilerData = compilerData;
this.propertyManager = propertyManager;
this.xmlCompilerHelper = xmlCompilerHelper;
}
/**
* Look for a project specified resources, which, if not absolute, are sought relative to the
* projects basedir. The path should use '/' as the fileSeparator. If the resource is not found,
* a CompilerException is thrown indicating fault in the parent element.
*
* @param path the relative path (using '/' as separator) to the resource.
* @param desc the description of the resource used to report errors
* @param parent the IXMLElement the resource is specified in, used to report errors
* @return a URL to the resource.
*/
public URL findProjectResource(String path, String desc, IXMLElement parent)
throws CompilerException
{
URL url = null;
File resource = new File(path);
if (!resource.isAbsolute())
{
resource = new File(compilerData.getBasedir(), path);
}
if (!resource.exists()) // fatal
{
assertionHelper.parseError(parent, desc + " not found: " + resource);
}
try
{
url = resource.toURI().toURL();
}
catch (MalformedURLException how)
{
assertionHelper.parseError(parent, desc + "(" + resource + ")", how);
}
return url;
}
/**
* Look for an IzPack resource either in the compiler jar, or within IZPACK_HOME. The path must
* not be absolute. The path must use '/' as the fileSeparator (it's used to access the jar
* file). If the resource is not found, take appropriate action base on ignoreWhenNotFound flag.
*
* @param path the relative path (using '/' as separator) to the resource.
* @param desc the description of the resource used to report errors
* @param parent the IXMLElement the resource is specified in, used to report errors
* @param ignoreWhenNotFound when false, throws a CompilerException indicating
* fault in the parent element when resource not found.
*/
public URL findIzPackResource(String path, String desc, IXMLElement parent, boolean ignoreWhenNotFound)
throws CompilerException
{
URL url = getClass().getResource("/" + path);
if (url == null)
{
File resource = new File(path);
if (!resource.isAbsolute())
{
resource = new File(CompilerData.IZPACK_HOME, path);
}
if (resource.exists())
{
try
{
url = resource.toURI().toURL();
}
catch (MalformedURLException how)
{
assertionHelper.parseError(parent, desc + "(" + resource + ")", how);
}
}
else
{
if (ignoreWhenNotFound)
{
assertionHelper.parseWarn(parent, desc + " not found: " + resource);
}
else
{
assertionHelper.parseError(parent, desc + " not found: " + resource);
}
}
}
return url;
}
public URL findIzPackResource(String path, String desc, IXMLElement parent)
throws CompilerException
{
return findIzPackResource(path, desc, parent, false);
}
/**
* Returns the IXMLElement representing the installation XML file.
*
* @return The XML tree.
* @throws com.izforge.izpack.api.exception.CompilerException
* For problems with the installation file
* @throws java.io.IOException for errors reading the installation file
*/
public IXMLElement getXMLTree() throws IOException
{
IXMLParser parser = new XMLParser();
IXMLElement data;
if (compilerData.getInstallFile() != null)
{
File file = new File(compilerData.getInstallFile()).getAbsoluteFile();
assertionHelper.assertIsNormalReadableFile(file, "Configuration file");
FileInputStream inputStream = new FileInputStream(compilerData.getInstallFile());
data = parser.parse(inputStream, file.getAbsolutePath());
inputStream.close();
// add izpack built in property
propertyManager.setProperty("izpack.file", file.toString());
}
else if (compilerData.getInstallText() != null)
{
data = parser.parse(compilerData.getInstallText());
}
else
{
throw new CompilerException("Neither install file nor text specified");
}
// We check it
if (!"installation".equalsIgnoreCase(data.getElement().getLocalName()))
{
assertionHelper.parseError(data, "this is not an IzPack XML installation file");
}
if (!CompilerData.VERSION.equalsIgnoreCase(xmlCompilerHelper.requireAttribute(data, "version")))
{
assertionHelper.parseError(data, "the file version is different from the compiler version");
}
// We finally return the tree
return data;
}
}