Adding a dialog for setting the Build Preferences in the target.txt file.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1342 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lhauch 2006-08-22 00:43:38 +00:00
parent e7cc0547dd
commit dbf5dd75da
2 changed files with 1005 additions and 47 deletions

View File

@ -99,6 +99,7 @@ import org.tianocore.frameworkwizard.platform.ui.FpdPlatformDefs;
import org.tianocore.frameworkwizard.workspace.Workspace;
import org.tianocore.frameworkwizard.workspace.WorkspaceTools;
import org.tianocore.frameworkwizard.workspace.ui.SwitchWorkspace;
import org.tianocore.frameworkwizard.toolchain.Preferences;
/**
The class is used to show main GUI of FrameworkWizard
@ -238,11 +239,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
private JMenuItem jMenuItemProjectChangeWorkspace = null;
private JMenu jMenuProjectBuildTargets = null;
private JMenuItem jMenuItemToolsBuildPreferences = null;
private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsDebug = null;
// private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsDebug = null;
private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsRelease = null;
// private JCheckBoxMenuItem jCheckBoxMenuItemProjectBuildTargetsRelease = null;
private JMenuItem jMenuItemToolsToolChainConfiguration = null;
@ -746,11 +747,13 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
//
// Add sub menu items
//
jMenuTools.add(getJMenuItemToolsToolChainConfiguration());
jMenuTools.addSeparator();
jMenuTools.add(getJMenuItemToolsClone());
jMenuTools.add(getJMenuItemToolsCodeScan());
jMenuTools.addSeparator();
jMenuTools.add(getJMenuItemToolsToolChainConfiguration());
jMenuTools.add(getJMenuItemToolsBuildPreferences());
}
return jMenuTools;
}
@ -1268,7 +1271,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
jMenuProject.add(getJMenuItemProjectUpdateFar());
jMenuProject.add(getJMenuItemProjectRemoveFar());
jMenuProject.add(getJMenuProjectBuildTargets());
}
return jMenuProject;
}
@ -1309,52 +1311,20 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
}
/**
This method initializes jMenuProjectBuildTargets
This method initializes jMenuProjectBuildPreferences
@return javax.swing.JMenu
**/
private JMenu getJMenuProjectBuildTargets() {
if (jMenuProjectBuildTargets == null) {
jMenuProjectBuildTargets = new JMenu();
jMenuProjectBuildTargets.setText("Build Targets");
jMenuProjectBuildTargets.setMnemonic('T');
jMenuProjectBuildTargets.setVisible(false);
jMenuProjectBuildTargets.add(getJCheckBoxMenuItemProjectBuildTargetsDebug());
jMenuProjectBuildTargets.add(getJCheckBoxMenuItemProjectBuildTargetsRelease());
private JMenuItem getJMenuItemToolsBuildPreferences() {
if (jMenuItemToolsBuildPreferences == null) {
jMenuItemToolsBuildPreferences = new JMenuItem();
jMenuItemToolsBuildPreferences.setText("Build Preferences");
jMenuItemToolsBuildPreferences.setMnemonic('P');
jMenuItemToolsBuildPreferences.setEnabled(true);
jMenuItemToolsBuildPreferences.addActionListener(this);
}
return jMenuProjectBuildTargets;
}
/**
This method initializes jCheckBoxMenuItemProjectBuildTargetsDebug
@return javax.swing.JCheckBoxMenuItem
**/
private JCheckBoxMenuItem getJCheckBoxMenuItemProjectBuildTargetsDebug() {
if (jCheckBoxMenuItemProjectBuildTargetsDebug == null) {
jCheckBoxMenuItemProjectBuildTargetsDebug = new JCheckBoxMenuItem();
jCheckBoxMenuItemProjectBuildTargetsDebug.setText("Debug");
jCheckBoxMenuItemProjectBuildTargetsDebug.setEnabled(false);
}
return jCheckBoxMenuItemProjectBuildTargetsDebug;
}
/**
This method initializes jCheckBoxMenuItemProjectBuildTargetsRelease
@return javax.swing.JCheckBoxMenuItem
**/
private JCheckBoxMenuItem getJCheckBoxMenuItemProjectBuildTargetsRelease() {
if (jCheckBoxMenuItemProjectBuildTargetsRelease == null) {
jCheckBoxMenuItemProjectBuildTargetsRelease = new JCheckBoxMenuItem();
jCheckBoxMenuItemProjectBuildTargetsRelease.setText("Release");
jCheckBoxMenuItemProjectBuildTargetsRelease.setEnabled(false);
}
return jCheckBoxMenuItemProjectBuildTargetsRelease;
return jMenuItemToolsBuildPreferences;
}
/**
@ -1880,6 +1850,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
if (arg0.getSource() == this.jMenuItemEditFindPpi) {
// this.findPpi();
}
if (arg0.getSource() == jMenuItemToolsBuildPreferences) {
configBuildPreferences();
}
if (arg0.getSource() == this.jMenuItemProjectChangeWorkspace) {
this.changeWorkspace();
@ -3200,6 +3174,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
tcc.showDialog();
}
private void configBuildPreferences() {
Preferences bt = Preferences.getInstance();
bt.showDialog();
}
/**
Clone selected item

View File

@ -0,0 +1,980 @@
/** @file
<<The file is used to update the Build Preferences file, target.txt>>
<<The program will use target.txt, the tools config file specified in that file,
or it will use the default tools_def.txt file, and it will also scan the
FrameworkDatabase.db file for certain parameters. >>
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Package Name: Tools
Module Name: FrameworkWizard
**/
package org.tianocore.frameworkwizard.toolchain;
import java.awt.event.ActionEvent;
import java.io.*;
import java.util.Vector;
import java.util.Iterator;
import javax.swing.*;
// import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JFrame;
import org.tianocore.frameworkwizard.common.GlobalData;
import org.tianocore.frameworkwizard.common.Tools;
import org.tianocore.frameworkwizard.common.Log;
import org.tianocore.frameworkwizard.common.ui.ArchCheckBox;
import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.*;
import org.tianocore.frameworkwizard.common.ui.IFrame;
import org.tianocore.frameworkwizard.workspace.Workspace;
import org.tianocore.frameworkwizard.workspace.WorkspaceTools;
import org.tianocore.frameworkwizard.platform.PlatformIdentification;
import org.tianocore.PlatformSurfaceAreaDocument;
/**
* The class is used to update the target.txt file.
*
* It extends IDialog
*
*/
public class Preferences extends IFrame {
// /
// / Define class Serial Version UID
// /
private static final long serialVersionUID = -4777906991966638888L;
private final boolean Debug = false;
//
// Define class members
//
private final int oneRowHeight = 20;
private final int twoRowHeight = 40;
private final int threeRowHeight = 60;
private final int sepHeight = 6;
private final int rowOne = 12;
private final int rowTwo = rowOne + oneRowHeight + sepHeight;
private final int rowThree = rowTwo + oneRowHeight + sepHeight;
private final int rowFour = rowThree + threeRowHeight + sepHeight;
private final int rowFive = rowFour + threeRowHeight + sepHeight;
private final int buttonRow = rowFive + oneRowHeight + sepHeight + sepHeight;
private final int dialogHeight = buttonRow + twoRowHeight + twoRowHeight;
private final int dialogWidth = 540;
private final int lastButtonXLoc = 430;
private final int next2LastButtonLoc = 329;
/*
* Define the contents for this dialog box
*/
private static Preferences bTarget = null;
private WorkspaceTools wt = new WorkspaceTools();
private JFrame frame;
private JPanel jContentPane = null;
private JLabel jLabelToolsConfigFile = null;
private JTextField jTextFieldToolsConfigFile = null;
private final int toolConfigFileRow = rowOne;
private final int toolDefFileId = 3;
private JLabel jLabelActivePlatform = null;
private JComboBox jComboBoxActivePlatform = null;
private final int activePlatformId = 0;
private final int activePlatformRow = rowTwo;
private JLabel jLabelToolChainTagName = null;
private JScrollPane jScrollPaneTagName = null;
private ICheckBoxList iCheckBoxListTagName = null;
private final int toolChainTagNameRow = rowThree;
private final int tagNameId = 4;
private JLabel jLabelBuildTarget = null;
private JScrollPane jScrollPaneBuildTarget = null;
private ICheckBoxList iCheckBoxListBuildTarget = null;
private final int buildTargetRow = rowFour;
private final int buildTargetId = 1;
private JLabel jLabelTargetArch = null;
private ArchCheckBox jArchCheckBox = null;
private final int targetArchRow = rowFive;
private final int targetArchId = 2;
private JButton jButtonBrowse = null;
private JButton jButtonSave = null;
private JButton jButtonCancel = null;
private final int labelColumn = 12;
private final int labelWidth = 155;
private final int valueColumn = 168;
private final int valueWidth = 352;
private final int valueWidthShort = 260;
private final int buttonWidth = 90;
private String workspaceDir = Workspace.getCurrentWorkspace() + System.getProperty("file.separator");
private String toolsDir = Workspace.getCurrentWorkspace() + System.getProperty("file.separator") + "Tools"
+ System.getProperty("file.separator") + "Conf";
private String defaultToolsConf = toolsDir + System.getProperty("file.separator") + "tools_def.txt";
private String targetFile = toolsDir + System.getProperty("file.separator") + "target.txt";
private String[] targetFileContents = new String[500];
// private String[] toolsConfContents;
private String[] targetLines = new String[5];
private int targetLineNumber[] = new int[5];
private String toolsConfFile;
private String toolsDefTargetNames = null;
private final int toolsDefTargetNameField = 0;
private String toolsDefTagNames = null;
private final int toolsDefTagNameField = 1;
private String toolsDefArchNames = null;
private final int toolsDefArchNameField = 2;
private String toolsDefIdentifier = null;
private int targetLineNumberMax;
private Vector<String> vArchList = null;
//
// Not used by UI
//
// private Preferences id = null;
// private EnumerationData ed = new EnumerationData();
/**
This method initializes jTextFieldToolsConfigFile
@return javax.swing.JTextField jTextFieldToolsConfigFile
**/
private JTextField getJTextFieldToolsConfigFile() {
if (jTextFieldToolsConfigFile == null) {
if (targetLines[toolDefFileId] != null) {
String sLine[] = targetLines[toolDefFileId].trim().split("=");
jTextFieldToolsConfigFile = new JTextField(sLine[1].trim());
} else
jTextFieldToolsConfigFile = new JTextField();
jTextFieldToolsConfigFile.setBounds(new java.awt.Rectangle(valueColumn, toolConfigFileRow, valueWidthShort,
oneRowHeight));
jTextFieldToolsConfigFile.setPreferredSize(new java.awt.Dimension(valueWidthShort, oneRowHeight));
jTextFieldToolsConfigFile
.setToolTipText("<html>"
+ "Specify the name of the filename to use for specifying"
+ "<br>the tools to use for the build. If not specified,"
+ "<br>tools_def.txt will be used for the build. This file"
+ "<br>MUST be located in the WORKSPACE/Tools/Conf directory.</html>");
}
return jTextFieldToolsConfigFile;
}
/**
* This method initializes jComboBoxActivePlatform
*
* @return javax.swing.JComboBox jComboBoxActivePlatform
*
*/
private JComboBox getActivePlatform() {
Vector<PlatformIdentification> vPlatformId = wt.getAllPlatforms();
if (jComboBoxActivePlatform == null) {
jComboBoxActivePlatform = new JComboBox();
jComboBoxActivePlatform.setBounds(new java.awt.Rectangle(valueColumn, activePlatformRow, valueWidth,
oneRowHeight));
jComboBoxActivePlatform.setPreferredSize(new java.awt.Dimension(valueWidth, oneRowHeight));
jComboBoxActivePlatform.setToolTipText("<html>Select &quot;Do Not Set&quot; if you want to build a platform"
+ "<br>from the directory where the FPD file exists,"
+ "<br>otherwise scroll down to select the platform.</html>");
/*
* Generate the data, selecting what is in target.txt
*/
jComboBoxActivePlatform.addItem("Do Not Set");
Iterator<PlatformIdentification> iter = vPlatformId.iterator();
while (iter.hasNext()) {
PlatformIdentification item = iter.next();
String path = item.getPath().trim();
String str = path.substring(workspaceDir.length(), path.length());
str.replace(System.getProperty("file.separator"), "/");
jComboBoxActivePlatform.addItem(str.trim());
}
if (targetLines[activePlatformId] == null)
jComboBoxActivePlatform.setSelectedItem("Do Not Set");
else
jComboBoxActivePlatform.setSelectedItem(targetLines[activePlatformId]);
}
return jComboBoxActivePlatform;
}
/**
* This method initializes jScrollPaneTagName
*
* @return javax.swing.JScrollPane jScrollPaneTagName
*
*/
private JScrollPane getJScrollPaneTagName() {
if (jScrollPaneTagName == null) {
jScrollPaneTagName = new JScrollPane();
jScrollPaneTagName.setBounds(new java.awt.Rectangle(valueColumn, toolChainTagNameRow, valueWidth,
threeRowHeight));
jScrollPaneTagName.setPreferredSize(new java.awt.Dimension(valueWidth, threeRowHeight));
jScrollPaneTagName.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPaneTagName.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPaneTagName.setViewportView(getICheckBoxListTagName());
jScrollPaneTagName.setToolTipText("<html>"
+ "Specify the TagName(s) from the tool configuration file to use"
+ "<br>for your builds. If not specified, all applicable TagName"
+ " <br>tools will be used for the build.</html>");
jScrollPaneTagName.setVisible(true);
}
return jScrollPaneTagName;
}
private ICheckBoxList getICheckBoxListTagName() {
if (iCheckBoxListTagName == null) {
iCheckBoxListTagName = new ICheckBoxList();
if (toolsDefTagNames != null) {
toolsDefTagNames.trim();
String aTagNames[] = toolsDefTagNames.trim().split(" ");
Vector<String> vTags = new Vector<String>();
for (int i = 0; i < aTagNames.length; i++) {
vTags.add(aTagNames[i]);
}
iCheckBoxListTagName.setAllItems(vTags);
} else {
Vector<String> defaultTags = stringToVector("MYTOOLS");
iCheckBoxListTagName.setAllItems(defaultTags);
}
iCheckBoxListTagName.setAllItemsUnchecked();
iCheckBoxListTagName.setToolTipText("<html>"
+ "Specify the TagName(s) from the tool configuration file to use"
+ "<br>for your builds. If not specified, all applicable TagName"
+ " <br>tools will be used for the build.</html>");
Vector<String> vSelectedTags = new Vector<String>();
if (targetLines[tagNameId] != null) {
targetLines[tagNameId].trim();
String targetTags[] = targetLines[tagNameId].trim().split(" ");
for (int j = 0; j < targetTags.length; j++)
vSelectedTags.add(targetTags[j]);
iCheckBoxListTagName.initCheckedItem(true, vSelectedTags);
}
}
return iCheckBoxListTagName;
}
/**
* This method initializes jScrollPaneBuildTarget
*
* @return javax.swing.JComboBox jScrollPaneBuildTarget
*
*/
private JScrollPane getJScrollPaneBuildTarget() {
if (jScrollPaneBuildTarget == null) {
jScrollPaneBuildTarget = new JScrollPane();
jScrollPaneBuildTarget.setBounds(new java.awt.Rectangle(valueColumn, buildTargetRow, valueWidth,
threeRowHeight));
jScrollPaneBuildTarget.setPreferredSize(new java.awt.Dimension(valueWidth, threeRowHeight));
jScrollPaneBuildTarget.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPaneBuildTarget.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPaneBuildTarget.setViewportView(getICheckBoxListBuildTarget());
jScrollPaneBuildTarget.setVisible(true);
jScrollPaneBuildTarget.setToolTipText("<html>"
+ "Select the TARGET Names that you want to build, such as<BR>"
+ "BUILD or BUILD and RELEASE"
+ "<br>If you do not set any of these, all available targets"
+ "<br>will be built.</html>");
}
return jScrollPaneBuildTarget;
}
private ICheckBoxList getICheckBoxListBuildTarget() {
if (iCheckBoxListBuildTarget == null) {
String aBuildTargets[] = toolsDefTargetNames.trim().split(" ");
Vector<String> vBuildTargets = new Vector<String>();
for (int i = 0; i < aBuildTargets.length; i++) {
vBuildTargets.add(aBuildTargets[i]);
}
iCheckBoxListBuildTarget = new ICheckBoxList();
iCheckBoxListBuildTarget.setAllItems(vBuildTargets);
iCheckBoxListBuildTarget.setAllItemsUnchecked();
iCheckBoxListBuildTarget.setToolTipText("<html>"
+ "Select the TARGET Names that you want to build, such as<BR>"
+ "BUILD or BUILD and RELEASE"
+ "<br>If you do not set any of these, all available targets"
+ "<br>will be built.</html>");
Vector<String> vSelectedTags = new Vector<String>();
if (targetLines[buildTargetId] != null) {
targetLines[buildTargetId].trim();
String targetTags[] = targetLines[buildTargetId].trim().split(" ");
for (int j = 0; j < targetTags.length; j++)
vSelectedTags.add(targetTags[j]);
iCheckBoxListBuildTarget.initCheckedItem(true, vSelectedTags);
}
}
return iCheckBoxListBuildTarget;
}
/**
This method initializes jButtonBrowse
@return javax.swing.JButton
**/
private JButton getJButtonBrowse() {
if (jButtonBrowse == null) {
jButtonBrowse = new JButton();
jButtonBrowse
.setBounds(new java.awt.Rectangle(lastButtonXLoc, toolConfigFileRow, buttonWidth, oneRowHeight));
jButtonBrowse.setText("Browse");
jButtonBrowse.setPreferredSize(new java.awt.Dimension(buttonWidth, oneRowHeight));
jButtonBrowse.addActionListener(new AbstractAction() {
/**
*
*/
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
//
// Select files from current workspace
//
String dirPrefix = toolsDir + System.getProperty("file.separator");
JFileChooser chooser = new JFileChooser(dirPrefix);
File theFile = null;
// String headerDest = null;
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int retval = chooser.showOpenDialog(frame);
if (retval == JFileChooser.APPROVE_OPTION) {
theFile = chooser.getSelectedFile();
String file = theFile.getPath();
if (!file.startsWith(dirPrefix)) {
JOptionPane.showMessageDialog(frame, "You can only select files in the Tools"
+ System.getProperty("file.separator")
+ "Conf directory!");
return;
}
jTextFieldToolsConfigFile.setText("Tools/Conf/" + theFile.getName());
} else {
return;
}
}
});
}
return jButtonBrowse;
}
/**
* This method initializes jButtonOk
*
* @return javax.swing.JButton
*
*/
private JButton getJButtonSave() {
if (jButtonSave == null) {
jButtonSave = new JButton();
jButtonSave.setBounds(new java.awt.Rectangle(next2LastButtonLoc, buttonRow, buttonWidth, oneRowHeight));
jButtonSave.setText("Save");
jButtonSave.addActionListener(this);
}
return jButtonSave;
}
/**
* This method initializes jButtonCancel
*
* @return javax.swing.JButton
*
*/
private JButton getJButtonCancel() {
if (jButtonCancel == null) {
jButtonCancel = new JButton();
jButtonCancel.setBounds(new java.awt.Rectangle(lastButtonXLoc, buttonRow, buttonWidth, oneRowHeight));
jButtonCancel.setText("Cancel");
jButtonCancel.addActionListener(this);
}
return jButtonCancel;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public static Preferences getInstance() {
if (bTarget == null) {
bTarget = new Preferences();
}
return bTarget;
}
/**
* This is the default constructor
*/
public Preferences() {
super();
init();
}
/**
* This method initializes this
*
*/
private void init() {
for (int i = 0; i < 5; i++) {
targetLines[i] = null;
targetLineNumber[i] = -1;
}
initReadFiles();
this.setSize(dialogWidth, dialogHeight);
this.setContentPane(getJContentPane());
this.setTitle("Build Preferences [" + toolsDefIdentifier + "]");
this.setDefaultCloseOperation(IFrame.EXIT_ON_CLOSE);
this.centerWindow();
this.setVisible(true);
}
/**
* This method initializes this Fill values to all fields if these values are
* not empty
*
* @param initReadFiles
*
*/
private void initReadFiles() {
/*
* TODO
* Read Current target.txt file first
* Read TOOL_CHAIN_CONF file if specified, otherwise use tools_def.txt
*/
readTargetTxtFile();
boolean haveBuildTargets = readToolDefinitionFile();
if (!haveBuildTargets) {
// Lookup Build Targets from the platforms
readPlatformFileBuildTargets();
}
}
private void readPlatformFileBuildTargets() {
Vector<PlatformIdentification> vPlatformId = wt.getAllPlatforms();
String sBuildTargets = "";
// foreach platform, build a list of BuildTargets
Iterator<PlatformIdentification> iter = vPlatformId.iterator();
while (iter.hasNext()) {
PlatformIdentification item = iter.next();
PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd = GlobalData.openingPlatformList
.getOpeningPlatformById(
item)
.getXmlFpd();
sBuildTargets += fpd.getPlatformDefinitions().getBuildTargets().toString() + " ";
}
String allTargets[] = sBuildTargets.trim().split(" ");
for (int i = 0; i < allTargets.length; i++) {
if (!toolsDefTargetNames.contains(allTargets[i])) {
toolsDefTargetNames += allTargets[i] + " ";
}
}
}
private boolean readToolDefinitionFile() {
// Parse the tool definition file looking for targets and architectures
toolsConfFile = null;
boolean buildTargetsExist = true;
if (targetLines[toolDefFileId] != null) {
String[] result = new String[2];
targetLines[toolDefFileId].trim();
result = (targetLines[toolDefFileId]).split("=");
String resString = (Tools.convertPathToCurrentOsType(result[1])).trim();
toolsConfFile = workspaceDir.trim() + resString.trim();
File toolsDefFile = new File(toolsConfFile);
if (!toolsDefFile.exists()) {
JOptionPane.showMessageDialog(this, "<html>" + "Tool Definition file, " + toolsConfFile
+ "<br>specified in the target.txt file does not exist!"
+ "<br>Using the default Tool Definition File:<br>"
+ defaultToolsConf);
toolsConfFile = defaultToolsConf;
}
} else {
toolsConfFile = defaultToolsConf;
}
String[] toolsDefFields = new String[5];
for (int i = 0; i < 5; i++)
toolsDefFields[i] = null;
File toolDefFile = new File(toolsConfFile);
if (toolDefFile.exists()) {
try {
FileReader fileReader = new FileReader(toolDefFile);
BufferedReader reader = new BufferedReader(fileReader);
String rLine = null;
String result[];
int lineCounter = 0;
while ((rLine = reader.readLine()) != null) {
if (rLine.startsWith("IDENTIFIER")) {
result = rLine.split("=");
toolsDefIdentifier = (result[1]).trim();
} else if ((!rLine.startsWith("#")) && (rLine.contains("="))) {
result = rLine.split("=");
toolsDefFields = ((result[0]).trim()).split("_");
if (toolsDefTargetNames == null) {
toolsDefTargetNames = (toolsDefFields[toolsDefTargetNameField]).trim() + " ";
} else if (!toolsDefTargetNames.contains((toolsDefFields[toolsDefTargetNameField]).trim())) {
toolsDefTargetNames += (toolsDefFields[toolsDefTargetNameField]).trim() + " ";
}
if (toolsDefTagNames == null) {
toolsDefTagNames = (toolsDefFields[toolsDefTagNameField]).trim() + " ";
} else if (!toolsDefTagNames.contains((toolsDefFields[toolsDefTagNameField]).trim())) {
toolsDefTagNames += (toolsDefFields[toolsDefTagNameField]).trim() + " ";
}
if (toolsDefArchNames == null) {
toolsDefArchNames = (toolsDefFields[toolsDefArchNameField]).trim() + " ";
} else if (!toolsDefArchNames.contains((toolsDefFields[toolsDefArchNameField]).trim())) {
toolsDefArchNames += (toolsDefFields[toolsDefArchNameField]).trim() + " ";
}
}
lineCounter++;
}
reader.close();
if (!toolsDefTargetNames.matches("[A-Z]+")) {
toolsDefTargetNames = toolsDefTargetNames.replace("* ", "").trim();
if (Debug)
System.out.println("tools_def file does not define build targets: '" + toolsDefTargetNames
+ "'");
buildTargetsExist = false;
}
} catch (IOException e) {
Log.log(toolsConfFile + " Read Error ", e.getMessage());
e.printStackTrace();
}
}
return buildTargetsExist;
}
private void readTargetTxtFile() {
File tFile = new File(targetFile);
if (tFile.exists()) {
try {
FileReader fileReader = new FileReader(targetFile);
BufferedReader reader = new BufferedReader(fileReader);
targetLineNumberMax = 0;
String rLine = null;
while ((rLine = reader.readLine()) != null) {
targetFileContents[targetLineNumberMax] = rLine;
if (rLine.startsWith("ACTIVE_PLATFORM")) {
// Only one active platform is permitted!
targetLines[activePlatformId] = rLine;
targetLineNumber[activePlatformId] = targetLineNumberMax;
}
if ((rLine.startsWith("TARGET" + " ")) || (rLine.startsWith("TARGET" + "\t"))
|| (rLine.startsWith("TARGET="))) {
// Handle multiple Target Names
if (rLine.contains(","))
targetLines[buildTargetId] = rLine.trim().replaceAll(",", " ");
else
targetLines[buildTargetId] = rLine.trim();
targetLineNumber[buildTargetId] = targetLineNumberMax;
}
if (rLine.startsWith("TARGET_ARCH")) {
// Handle multiple Target Architectures
if (rLine.contains(","))
targetLines[targetArchId] = rLine.trim().replaceAll(",", " ");
else
targetLines[targetArchId] = rLine.trim();
targetLineNumber[targetArchId] = targetLineNumberMax;
}
if (rLine.startsWith("TOOL_CHAIN_CONF")) {
// Only one file is permitted
targetLines[toolDefFileId] = rLine.trim();
targetLineNumber[toolDefFileId] = targetLineNumberMax;
}
if (rLine.startsWith("TOOL_CHAIN_TAG")) {
// Handle multiple Tool TagNames
if (rLine.contains(","))
targetLines[tagNameId] = rLine.trim().replaceAll(",", " ");
else
targetLines[tagNameId] = rLine.trim();
targetLineNumber[tagNameId] = targetLineNumberMax;
}
targetLineNumberMax++;
}
reader.close();
String archLine[] = new String[2];
if (targetLines[targetArchId] != null) {
if (targetLines[targetArchId].contains("=")) {
if (targetLines[targetArchId].contains(","))
targetLines[targetArchId] = targetLines[targetArchId].trim().replaceAll(",", " ");
if (targetLines[targetArchId].length() > 0)
archLine = targetLines[targetArchId].trim().split("=");
vArchList = stringToVector(archLine[1]);
}
}
if (Debug == true)
for (int i = 0; i <= tagNameId; i++)
System.out.println("targetLines[" + i + "] contains: " + targetLines[i] + " index is: "
+ targetLineNumber[i]);
} catch (IOException e) {
Log.log(this.targetFile + " Read Error ", e.getMessage());
e.printStackTrace();
}
}
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel jContentPane
*
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabelToolsConfigFile = new JLabel();
jLabelToolsConfigFile.setBounds(new java.awt.Rectangle(labelColumn, toolConfigFileRow, labelWidth,
oneRowHeight));
jLabelToolsConfigFile.setText("Tool Chain Definition File");
jLabelActivePlatform = new JLabel();
jLabelActivePlatform.setText("Select Active Platform");
jLabelActivePlatform.setBounds(new java.awt.Rectangle(labelColumn, activePlatformRow, labelWidth,
oneRowHeight));
jLabelToolChainTagName = new JLabel();
jLabelToolChainTagName.setBounds(new java.awt.Rectangle(labelColumn, toolChainTagNameRow, labelWidth,
oneRowHeight));
jLabelToolChainTagName.setText("Select Tool Tag Name");
jLabelBuildTarget = new JLabel();
jLabelBuildTarget.setBounds(new java.awt.Rectangle(labelColumn, buildTargetRow, labelWidth, oneRowHeight));
jLabelBuildTarget.setText("Select Build Target");
jLabelTargetArch = new JLabel();
jLabelTargetArch.setBounds(new java.awt.Rectangle(labelColumn, targetArchRow, labelWidth, oneRowHeight));
jLabelTargetArch.setText("Build Architectures");
jArchCheckBox = new ArchCheckBox();
jArchCheckBox.setBounds(new java.awt.Rectangle(valueColumn, targetArchRow, valueWidth, oneRowHeight));
jArchCheckBox.setPreferredSize(new java.awt.Dimension(valueWidth, oneRowHeight));
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.setPreferredSize(new java.awt.Dimension(dialogWidth - 10, dialogHeight - 10));
jContentPane.add(jLabelToolsConfigFile, null);
jContentPane.add(getJTextFieldToolsConfigFile(), null);
jContentPane.add(getJButtonBrowse(), null);
jContentPane.add(jLabelActivePlatform, null);
jContentPane.add(getActivePlatform(), null);
jContentPane.add(jLabelToolChainTagName, null);
jContentPane.add(getJScrollPaneTagName(), null);
jContentPane.add(jLabelBuildTarget, null);
jContentPane.add(getJScrollPaneBuildTarget(), null);
jContentPane.add(jLabelTargetArch, null);
jArchCheckBox.setSelectedItems(vArchList);
jContentPane.add(jArchCheckBox, null);
jContentPane.add(getJButtonSave(), null);
jContentPane.add(getJButtonCancel(), null);
}
return jContentPane;
}
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*
* Override actionPerformed to listen all actions
*
*/
public void actionPerformed(ActionEvent arg0) {
if (arg0.getSource() == jButtonBrowse) {
// TODO: Call file browser, starting in $WORKSPACE/Tools/Conf directory
}
if (arg0.getSource() == jButtonSave) {
saveTargetFile();
JOptionPane.showMessageDialog(this, "<html>The target.txt file has been saved!"
+ "<br>A copy of the original file, target.txt.bak has"
+ "<br>also been created.</html>");
this.exit();
}
if (arg0.getSource() == jButtonCancel) {
this.exit();
}
}
private void updateActivePlatform() {
int lineAP;
if (targetLines[activePlatformId] != null) {
lineAP = targetLineNumber[activePlatformId];
} else {
lineAP = targetLineNumberMax;
targetLineNumber[activePlatformId] = lineAP;
targetLineNumberMax++;
}
if (jComboBoxActivePlatform.getSelectedItem() == "Do Not Set") {
targetFileContents[lineAP] = "";
targetLines[activePlatformId] = "";
} else {
targetFileContents[lineAP] = "ACTIVE_PLATFORM = " + jComboBoxActivePlatform.getSelectedItem() + "\r\n";
targetLines[activePlatformId] = targetFileContents[lineAP];
}
if (Debug)
System.out.println("Active Platform: " + targetFileContents[lineAP]);
}
private void updateToolDefFile() {
int lineTDF;
if (targetLines[toolDefFileId] != null) {
lineTDF = targetLineNumber[toolDefFileId];
} else {
lineTDF = targetLineNumberMax;
targetLineNumber[toolDefFileId] = lineTDF;
targetLineNumberMax++;
}
if (Debug)
System.out.println("Tool Config File: " + jTextFieldToolsConfigFile.getText());
if (jTextFieldToolsConfigFile.getText() == null) {
targetFileContents[lineTDF] = "";
targetLines[toolDefFileId] = "";
} else {
targetFileContents[lineTDF] = "TOOL_CHAIN_CONF = " + jTextFieldToolsConfigFile.getText() + "\r\n";
targetLines[toolDefFileId] = targetFileContents[lineTDF];
}
}
private void updateToolTagNames() {
String sTagNames = vectorToString(iCheckBoxListTagName.getAllCheckedItemsString());
int lineTTN;
if (targetLines[tagNameId] != null) {
lineTTN = targetLineNumber[tagNameId];
} else {
lineTTN = targetLineNumberMax;
targetLineNumber[tagNameId] = lineTTN;
targetLineNumberMax++;
}
if (Debug)
System.out.println("Tag Name(s): " + sTagNames);
if (sTagNames.length() > 0) {
targetFileContents[lineTTN] = "TOOL_CHAIN_TAG = " + sTagNames + "\r\n";
targetLines[tagNameId] = targetFileContents[lineTTN];
} else {
targetFileContents[lineTTN] = "";
targetLines[tagNameId] = "";
}
}
private void updateBuildTargets() {
String sBuildTargets = vectorToString(iCheckBoxListBuildTarget.getAllCheckedItemsString());
int lineBT;
if (targetLines[buildTargetId] != null) {
lineBT = targetLineNumber[buildTargetId];
} else {
lineBT = targetLineNumberMax;
targetLineNumber[buildTargetId] = lineBT;
targetLineNumberMax++;
}
if (Debug)
System.out.println("Build Target(s): " + sBuildTargets);
if (sBuildTargets.length() > 0) {
targetFileContents[lineBT] = "TARGET = " + sBuildTargets + "\r\n";
targetLines[buildTargetId] = targetFileContents[lineBT];
} else {
targetFileContents[lineBT] = "";
targetLines[buildTargetId] = "";
}
}
private void updateArchitectures() {
String sArchList = jArchCheckBox.getSelectedItemsString().trim();
if (Debug)
System.out.println("Architectures: " + sArchList);
int lineSA;
if (targetLines[targetArchId] != null) {
lineSA = targetLineNumber[targetArchId];
} else {
lineSA = targetLineNumberMax;
targetLineNumber[targetArchId] = lineSA;
targetLineNumberMax++;
}
if (sArchList == "") {
targetFileContents[lineSA] = "";
targetLines[targetArchId] = "";
} else {
targetFileContents[lineSA] = "TARGET_ARCH = " + sArchList + "\r\n";
targetLines[targetArchId] = targetFileContents[lineSA];
}
}
private String vectorToString(Vector<String> v) {
String s = " ";
for (int i = 0; i < v.size(); ++i) {
s += v.get(i);
s += " ";
}
return s.trim();
}
protected Vector<String> stringToVector(String s) {
if (s == null) {
return null;
}
String[] sArray = s.split(" ");
Vector<String> v = new Vector<String>();
for (int i = 0; i < sArray.length; ++i) {
v.add(sArray[i]);
}
return v;
}
private void saveTargetFile() {
updateActivePlatform();
updateToolDefFile();
updateToolTagNames();
updateBuildTargets();
updateArchitectures();
try {
copy(targetFile, targetFile + ".bak");
FileWriter fileWriter = new FileWriter(targetFile);
BufferedWriter writer = new BufferedWriter(fileWriter);
for (int i = 0; i < targetLineNumberMax; i++) {
writer.write(targetFileContents[i] + "\r\n");
}
writer.close();
} catch (IOException e) {
Log.err(toolsConfFile + " Write Error ", e.getMessage());
e.printStackTrace();
}
}
private void copy(String txtFile, String bakFile) throws IOException {
File fromFile = new File(txtFile);
File toFile = new File(bakFile);
FileInputStream fromTxt = null;
FileOutputStream toBak = null;
try {
fromTxt = new FileInputStream(fromFile);
toBak = new FileOutputStream(toFile);
byte[] buffer = new byte[4096];
int bytes_read;
while ((bytes_read = fromTxt.read(buffer)) != -1) {
toBak.write(buffer, 0, bytes_read);
}
} finally {
if (fromTxt != null)
try {
fromTxt.close();
} catch (IOException e) {
Log.err(toolsConfFile + " Read Error ", e.getMessage());
}
if (toBak != null)
try {
toBak.close();
} catch (IOException e) {
Log.err(toolsConfFile + ".bak Write Error ", e.getMessage());
}
}
}
private void exit() {
this.setVisible(false);
if (bTarget != null) {
bTarget.dispose();
}
}
}