You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jitsi/web-start/ant-ext/GenerateFelixConfigs.java

174 lines
5.0 KiB

/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* 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.
*/
import org.apache.tools.ant.*;
import java.io.*;
import java.util.*;
public class GenerateFelixConfigs
extends Task
{
private File baseConfig;
private String os;
private File libdir;
private File bundledir;
private File output;
public void setFile(File f)
{
baseConfig = f;
}
public void setOs(String os)
{
this.os = os;
}
public void setBundledir(File bundledir)
{
this.bundledir = bundledir;
}
public void setLibdir(File libdir)
{
this.libdir = libdir;
}
public void setOutput(File output)
{
this.output = output;
}
public void execute() throws BuildException
{
try
{
execute0();
}
catch (Exception e)
{
e.printStackTrace();
throw new BuildException(e);
}
}
public void execute0() throws BuildException
{
Properties pIn = new Properties();
Properties pOut = new Properties();
try
{
pIn.load(new FileInputStream(baseConfig));
}
catch (FileNotFoundException e)
{
throw new BuildException(e);
}
catch (IOException e)
{
throw new BuildException(e);
}
for (Map.Entry<Object, Object> e : pIn.entrySet())
{
if (((String) e.getKey()).startsWith("felix.auto.start."))
{
String[] refs = ((String) e.getValue()).split("\\s");
StringBuilder value = new StringBuilder();
for (String jar : refs)
{
if (jar.startsWith("reference:file:sc-bundles/"))
{
String name =
jar.substring("reference:file:sc-bundles/".length());
if (contains(
new File(bundledir, "os-specific/" + os).list(),
name))
{
value.append("@URL@/sc-bundles/");
value.append("os-specific/");
value.append(os);
value.append("/");
value.append(name);
}
else if (contains(bundledir.list(), name))
{
value.append("@URL@/sc-bundles/");
value.append(name);
}
else
{
log("Bundle <" + name + "> not found in <"
+ bundledir.getName()
+ ">. Seems like this bundle was ignored.");
}
}
else if (jar.startsWith("reference:file:lib/bundle/"))
{
String name =
jar.substring("reference:file:lib/bundle/".length());
if (contains(libdir.list(), name))
{
value.append("@URL@/lib/bundle/");
value.append(name);
}
else
{
log("Lib <" + name + "> not found in <" + libdir
+ ">. Seems like this lib was ignored.");
}
}
else
{
throw new BuildException(
"unsupported reference prefix: " + jar);
}
value.append(" ");
}
pOut.put(e.getKey(), value.toString());
}
else
{
pOut.put(e.getKey(), e.getValue());
}
}
try
{
pOut.store(new FileOutputStream(output),
"--- autogenerated by GenerateFelixConfigs, do not edit! ---");
}
catch (FileNotFoundException e)
{
throw new BuildException(e);
}
catch (IOException e)
{
throw new BuildException(e);
}
}
private boolean contains(String[] files, String file)
{
return Arrays.asList(files).contains(file);
}
}