/*******************************************************************************
* Copyright (c) 2015 ARM Ltd. and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* ARM Ltd and ARM Germany GmbH - Initial API and implementation
*******************************************************************************/
package com.arm.cmsis.pack.info;
import com.arm.cmsis.pack.common.CmsisConstants;
import com.arm.cmsis.pack.data.CpItem;
import com.arm.cmsis.pack.data.CpPackFilter;
import com.arm.cmsis.pack.data.CpRootItem;
import com.arm.cmsis.pack.data.ICpItem;
import com.arm.cmsis.pack.data.ICpPack;
import com.arm.cmsis.pack.data.ICpPackFilter;
import com.arm.cmsis.pack.utils.Utils;
/**
* The class inplementing ICpConfigurationInfo interface
*/
public class CpConfigurationInfo extends CpRootItem implements ICpConfigurationInfo {
public CpConfigurationInfo() {
super(NULL_CPITEM, CmsisConstants.CONFIGURATION_TAG);
}
public CpConfigurationInfo(ICpDeviceInfo deviceInfo, ICpItem toolchainInfo, boolean createDefaultTags) {
this();
if (createDefaultTags) {
ICpPackFilterInfo filterInfo = new CpPackFilterInfo(this);
addChild(filterInfo);
}
// add device
deviceInfo.setParent(this);
addChild(deviceInfo);
// add toolchain
toolchainInfo.setParent(this);
addChild(toolchainInfo);
if (createDefaultTags) {
getComponentsItem();
}
}
public CpConfigurationInfo(String tag, String fileName) {
super(tag, fileName);
}
@Override
public ICpPack getPack() {
// return DFP taken from device info
ICpDeviceInfo di = getDeviceInfo();
if(di == null )
return null;
return di.getPack();
}
@Override
public String getDfpPath() {
ICpPack pack = getPack();
if(pack != null)
return pack.getDir(true);
return null;
}
@Override
protected ICpItem createChildItem(String tag) {
return createChildItem(this, tag);
}
public static ICpItem createChildItem(ICpItem parent, String tag) {
switch(tag) {
case CmsisConstants.API_TAG:
case CmsisConstants.COMPONENT_TAG:
return new CpComponentInfo(parent, tag);
case CmsisConstants.DEVICE_TAG:
return new CpDeviceInfo(parent, tag);
case CmsisConstants.PACKAGE_TAG:
return new CpPackInfo(parent, tag);
case CmsisConstants.PACKAGES_TAG:
return new CpPackFilterInfo(parent, tag);
case CmsisConstants.FILE_TAG:
return new CpFileInfo(parent, tag);
default:
break;
}
return new CpItem(parent, tag);
}
@Override
public ICpDeviceInfo getDeviceInfo() {
return (ICpDeviceInfo)getFirstChild(CmsisConstants.DEVICE_TAG);
}
@Override
public ICpItem getToolChainInfo() {
return getFirstChild(CmsisConstants.TOOLCHAIN_TAG);
}
@Override
public ICpPackFilterInfo getPackFilterInfo() {
ICpItem child = getFirstChild(CmsisConstants.PACKAGES_TAG);
if(child instanceof ICpPackFilterInfo) {
return (ICpPackFilterInfo)child;
}
return null;
}
@Override
public ICpPackFilter createPackFilter() {
ICpPackFilterInfo filterInfo = getPackFilterInfo();
if(filterInfo != null) {
return filterInfo.createPackFilter();
}
return new CpPackFilter();
}
@Override
public ICpItem getComponentsItem() {
ICpItem componentInfos = getFirstChild(CmsisConstants.COMPONENTS_TAG);
if(componentInfos == null) {
componentInfos = new CpItem(this, CmsisConstants.COMPONENTS_TAG);
addChild(componentInfos);
}
return componentInfos;
}
@Override
public ICpItem getApisItem() {
ICpItem apiInfos = getFirstChild(CmsisConstants.APIS_TAG);
if(apiInfos == null) {
apiInfos = new CpItem(this, CmsisConstants.APIS_TAG);
addChild(apiInfos);
}
return apiInfos;
}
@Override
public String getName() {
if(fileName != null && !fileName.isEmpty())
return Utils.extractBaseFileName(fileName);
return super.getName();
}
}