blob: b596a9b3fbe30a899968a6291d733a0b17a8fdab [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 npanday.vendor.impl;
import npanday.registry.Repository;
import npanday.registry.RepositoryRegistry;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.*;
import java.util.Hashtable;
import java.util.List;
import java.util.ArrayList;
import npanday.model.settings.NPandaySettings;
import npanday.model.settings.Vendor;
import npanday.model.settings.DefaultSetup;
import npanday.model.settings.Framework;
import npanday.model.settings.io.xpp3.NPandaySettingsXpp3Reader;
import npanday.PlatformUnsupportedException;
import npanday.vendor.VendorFactory;
import npanday.vendor.VendorInfo;
import npanday.vendor.VendorUnsupportedException;
/**
* Provides methods for loading and reading the npanday-settings config file.
*
* @author Shane Isbell
*/
public final class SettingsRepository
implements Repository
{
/**
* List of all vendors from the npanday-settings file. The <code>Vendor</code> is the raw model type.
*/
private List<Vendor> vendors;
/**
* The default setup: framework version, vendor, vendor version. If no information is provided by the user, then
* this information will be used to choose the environment. It may also be used for partial matches, if appropriate.
*/
private DefaultSetup defaultSetup;
/**
* List of all vendors from the npanday-settings file.
*/
private List<VendorInfo> vendorInfos;
/**
* Constructor. This method is intended to be invoked by the <code>RepositoryRegistry<code>, not by the
* application developer.
*/
public SettingsRepository()
{
}
/**
* @see Repository#load(java.io.InputStream, java.util.Hashtable)
*/
public void load( InputStream inputStream, Hashtable properties )
throws IOException
{
NPandaySettingsXpp3Reader xpp3Reader = new NPandaySettingsXpp3Reader();
Reader reader = new InputStreamReader( inputStream );
NPandaySettings settings;
try
{
settings = xpp3Reader.read( reader );
}
catch ( XmlPullParserException e )
{
e.printStackTrace();
throw new IOException( "NPANDAY-104-000: Could not read npanday-settings.xml" );
}
vendors = settings.getVendors();
defaultSetup = settings.getDefaultSetup();
vendorInfos = new ArrayList<VendorInfo>();
for ( Vendor v : vendors )
{
List<Framework> frameworks = v.getFrameworks();
for ( Framework framework : frameworks )
{
VendorInfo vendorInfo = VendorInfo.Factory.createDefaultVendorInfo();
vendorInfo.setVendorVersion( v.getVendorVersion() );
List<File> executablePaths = new ArrayList<File>();
executablePaths.add(new File( framework.getInstallRoot() ));
if(framework.getSdkInstallRoot() != null)
{
executablePaths.add( new File(framework.getSdkInstallRoot()));
}
vendorInfo.setExecutablePaths( executablePaths );
vendorInfo.setFrameworkVersion( framework.getFrameworkVersion() );
try
{
vendorInfo.setVendor( VendorFactory.createVendorFromName( v.getVendorName() ) );
}
catch ( VendorUnsupportedException e )
{
continue;
}
vendorInfo.setDefault(
v.getIsDefault() != null && v.getIsDefault().toLowerCase().trim().equals( "true" ) );
vendorInfos.add( vendorInfo );
}
}
}
/**
* @see Repository#setRepositoryRegistry(npanday.registry.RepositoryRegistry)
*/
public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry )
{
}
/**
* Returns all vendor infos from the npanday-settings file.
*
* @return all vendor infos from the npanday-settings file
*/
List<VendorInfo> getVendorInfos()
{
return vendorInfos;
}
File getSdkInstallRootFor( String vendor, String vendorVersion, String frameworkVersion )
throws PlatformUnsupportedException
{
if ( vendor == null || vendorVersion == null || frameworkVersion == null )
{
throw new PlatformUnsupportedException( "NPANDAY-104-004: One of more of the parameters is null: Vendor = " +
vendor + ", Vendor Version = " + vendorVersion + ", Framework Version = " + frameworkVersion );
}
for ( Vendor v : vendors )
{
if ( vendor.equals( v.getVendorName().trim() ) && vendorVersion.equals( v.getVendorVersion().trim() ) )
{
List<Framework> frameworks = v.getFrameworks();
for ( Framework framework : frameworks )
{
if ( frameworkVersion.equals( framework.getFrameworkVersion().trim() ) )
{
String sdkRoot = framework.getSdkInstallRoot();
if(sdkRoot != null) return new File(sdkRoot );
}
}
}
}
return null;
}
/**
* Returns the install root for the .NET framework for the specified parameters. None of the parameter values
* should be null.
*
* @param vendor the vendor name
* @param vendorVersion the vendor version
* @param frameworkVersion the .NET framework version
* @return the install root for the .NET framework
* @throws npanday.PlatformUnsupportedException if there is no install root found for the specified parameters
*/
public File getInstallRootFor( String vendor, String vendorVersion, String frameworkVersion )
throws PlatformUnsupportedException
{
if ( vendor == null || vendorVersion == null || frameworkVersion == null )
{
throw new PlatformUnsupportedException( "NPANDAY-104-001: One of more of the parameters is null: Vendor = " +
vendor + ", Vendor Version = " + vendorVersion + ", Framework Version = " + frameworkVersion );
}
for ( Vendor v : vendors )
{
if ( vendor.equals( v.getVendorName().trim() ) && vendorVersion.equals( v.getVendorVersion().trim() ) )
{
List<Framework> frameworks = v.getFrameworks();
for ( Framework framework : frameworks )
{
if ( frameworkVersion.equals( framework.getFrameworkVersion().trim() ))
{
return new File( framework.getInstallRoot() );
}
}
}
}
throw new PlatformUnsupportedException( "NPANDAY-104-002: Unable to find install root: Vendor = " + vendor +
", Vendor Version = " + vendorVersion + ", Framework Version = " + frameworkVersion );
}
/**
* Returns the default setup: framework version, vendor, vendor version. If no information is provided by the user, then
* this information will be used to choose the environment. It may also be used for partial matches, if appropriate.
*
* @return the default setup: framework version, vendor, vendor version
*/
DefaultSetup getDefaultSetup()
{
return defaultSetup;
}
}