Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 8500 invoked from network); 30 Jun 2008 15:23:26 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 30 Jun 2008 15:23:26 -0000 Received: (qmail 93256 invoked by uid 500); 30 Jun 2008 15:23:28 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 93234 invoked by uid 500); 30 Jun 2008 15:23:28 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 93225 invoked by uid 99); 30 Jun 2008 15:23:27 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 30 Jun 2008 08:23:27 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 30 Jun 2008 15:22:44 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id EAE9A23889C2; Mon, 30 Jun 2008 08:23:04 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r672793 - in /harmony/enhanced/jdktools/trunk/modules: samsa/ tools/src/main/java/org/apache/harmony/tools/policytool/ tools/src/main/java/org/apache/harmony/tools/policytool/control/ tools/src/main/java/org/apache/harmony/tools/policytool/... Date: Mon, 30 Jun 2008 15:23:04 -0000 To: commits@harmony.apache.org From: sjanuary@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080630152304.EAE9A23889C2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sjanuary Date: Mon Jun 30 08:23:03 2008 New Revision: 672793 URL: http://svn.apache.org/viewvc?rev=672793&view=rev Log: Apply initial patch for HARMONY-5886 (The well known policytool tool for Harmony) Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Consts.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Main.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/Controller.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/PolicyFileHandler.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/CommentEntry.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystoreEntry.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystorePasswordURLEntry.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/PolicyEntry.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/DirectTextEditorPanel.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/EditorPanel.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/GraphicalEditorPanel.java (with props) harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/MainFrame.java (with props) Modified: harmony/enhanced/jdktools/trunk/modules/samsa/build.xml Modified: harmony/enhanced/jdktools/trunk/modules/samsa/build.xml URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/samsa/build.xml?rev=672793&r1=672792&r2=672793&view=diff ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/samsa/build.xml (original) +++ harmony/enhanced/jdktools/trunk/modules/samsa/build.xml Mon Jun 30 08:23:03 2008 @@ -84,6 +84,9 @@ + + + Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Consts.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Consts.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Consts.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Consts.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,36 @@ +/* + * 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 org.apache.harmony.tools.policytool; + +/** + * Holds general and application-wide constants. + */ +public class Consts { + + /** Name of the application. */ + public static final String APPLICATION_NAME = "Policytool"; + + /** X coordinate of the main frame on startup. */ + public static final int MAIN_FRAME_START_POS_X = 200; + /** Y coordinate of the main frame on startup. */ + public static final int MAIN_FRAME_START_POS_Y = 100; + + /** Font size in the direct editing panel. */ + public static final int DIRECT_EDITING_FONT_SIZE = 13; + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Consts.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Consts.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Main.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Main.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Main.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Main.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,100 @@ +/* + * 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 org.apache.harmony.tools.policytool; + +import org.apache.harmony.tools.policytool.view.MainFrame; + +/** + * The main class that parses command line parameters, and starts the GUI if everything everything is ok. + * + */ +public class Main { + + /** Name of policy file to be loaded initially. */ + private static String policyFileName; + + /** + * Entry point of the program. + * + * @param arguments used to take arguments from the running environment + */ + public static void main( final String[] arguments ) { + + if ( processArguments( arguments ) ) { + if ( policyFileName == null ) + new MainFrame().setVisible( true ); + else + new MainFrame( policyFileName ).setVisible( true ); + } + + } + + /** + * Processes the command line arguments.
+ * Currently only one option is supported: + *
    [-file file]
+ * for specifying the name of a policy file to be loaded initially. + * + * @param arguments arguments taken from the running environment + * @return true if arguments were processed successfully and launching the GUI is allowed;
+ * false if there were missing or invalid arguments, or no GUI launch is needed + */ + private static boolean processArguments( final String[] arguments ) { + if ( arguments.length == 0 ) + return true; + + else { + if ( arguments[ 0 ].startsWith( "-" ) ) // If it is a "real" option + if ( arguments[ 0 ].equalsIgnoreCase( "-file" ) ) { + if ( arguments.length < 2 ) { // policy file name must be provided + printErrorMessageAndUsage( "Missing policy file name!" ); + return false; + } + else { + policyFileName = arguments[ 1 ]; + return true; + } + } + else { + printErrorMessageAndUsage( "Illegal option: " + arguments[ 0 ] ); + return false; + } + else + return true; // else the arguments are ignored + } + } + + /** + * Prints an error message to the standard output followed by the program ussage. + * @param errorMessage error message to be printed + */ + private static void printErrorMessageAndUsage( final String errorMessage ) { + System.out.println( errorMessage ); + printUsage(); + } + + /** + * Prints the program usage to the standard output. + */ + private static void printUsage() { + System.out.println( "Usage: policytool [options]" ); + System.out.println(); + System.out.println( " [-file ] name of policy file to be loaded initially" ); + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Main.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/Main.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/Controller.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/Controller.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/Controller.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/Controller.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,211 @@ +/* + * 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 org.apache.harmony.tools.policytool.control; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +import javax.swing.JFileChooser; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JTabbedPane; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import org.apache.harmony.tools.policytool.view.EditorPanel; +import org.apache.harmony.tools.policytool.view.MainFrame.MenuItemEnum; + +/** + * The controller handles the user actions, drives the GUI and connects it to the model. + */ +public class Controller implements ChangeListener, ActionListener{ + + /** Reference to the main frame component. */ + private final Component mainFrame; + /** Array of the editor panels. */ + private final EditorPanel[] editorPanels; + /** Reference to the active editor panel. */ + private EditorPanel activeEditorPanel; + + /** Reference to the keystore edit menu item. */ + private JMenuItem keystoreEditMenuItem; + + /** The currently edited policy file. */ + private File editedPolicyFile; + + /** + * Creates a new Controller. + * @param mainFrame reference to the main frame component + * @param editorPanels array of the editor panels + * @param policyFileName policy file name to be loaded initially + */ + public Controller( final Component mainFrame, final EditorPanel[] editorPanels, final String policyFileName ) { + this.mainFrame = mainFrame; + this.editorPanels = editorPanels; + activeEditorPanel = editorPanels[ 0 ]; + + PolicyFileHandler.setDialogParentComponent( mainFrame ); + + editedPolicyFile = new File( policyFileName ); + activeEditorPanel.loadPolicyText( PolicyFileHandler.loadPoilcyFile( editedPolicyFile ) ); + } + + /** + * Returns the array of editor panels. + * @return the array of editor panels + */ + public EditorPanel[] getEditorPanels() { + return editorPanels; + } + + /** + * Sets the keystore edit menu item. + * @param keystoreEditMenuItem the keystore edit menu item + */ + public void setKeystoreEditMenuItem( final JMenuItem keystoreEditMenuItem ) { + this.keystoreEditMenuItem = keystoreEditMenuItem; + keystoreEditMenuItem.setEnabled( activeEditorPanel.supportsGraphicalKeystoreEdit() ); + } + + /** + * Exits from the program.
+ * There might be unsaved changes in which case confirmation will be asked. + */ + public void exit() { + boolean exitOk = false; + + if ( activeEditorPanel.getHasDirty() ) { + + switch ( JOptionPane.showConfirmDialog( mainFrame, "There are unsaved changes. Save before exit?", "Warning", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE ) ) { + + case JOptionPane.YES_OPTION: + final JFileChooser fileChooser = new JFileChooser(); + + if ( editedPolicyFile == null ) { + if ( fileChooser.showSaveDialog( mainFrame ) == JFileChooser.APPROVE_OPTION ) + editedPolicyFile = fileChooser.getSelectedFile(); + } + if ( editedPolicyFile != null ) { + if ( !PolicyFileHandler.savePolicyFile( editedPolicyFile, activeEditorPanel.getPolicyText() ) ) { + switch ( JOptionPane.showConfirmDialog( mainFrame, "Saving failed. Do you still want to exit?", "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE ) ) { + case JOptionPane.YES_OPTION: + exitOk = true; + break; + + case JOptionPane.NO_OPTION: + case JOptionPane.CLOSED_OPTION: + // We chose not to exit. exitOk = false + break; + } + } + else {// Changes saved successfully + activeEditorPanel.setHasDirty( false ); + exitOk = true; + } + } + break; + + case JOptionPane.NO_OPTION: + exitOk = true; + break; + + case JOptionPane.CANCEL_OPTION: + case JOptionPane.CLOSED_OPTION: + // We chose not to exit. exitOk = false + break; + + } + + } + else + exitOk = true; + + if ( exitOk ) + System.exit( 0 ); + } + + /** + * Handles change events of the editors tabbed pane. + * @param ce details of the change event + */ + public void stateChanged( final ChangeEvent ce ) { + final EditorPanel newActiveEditorPanel = (EditorPanel) ( (JTabbedPane) ce.getSource() ).getSelectedComponent(); + + newActiveEditorPanel.loadPolicyText( activeEditorPanel.getPolicyText() ); + newActiveEditorPanel.setHasDirty ( activeEditorPanel.getHasDirty () ); + activeEditorPanel = newActiveEditorPanel; + + keystoreEditMenuItem.setEnabled( activeEditorPanel.supportsGraphicalKeystoreEdit() ); + } + + /** + * Handles the action events of the menu items. + * @param ae details of the action event + */ + public void actionPerformed( final ActionEvent ae ) { + // The action command is the ordinal of the menu item enum. + final MenuItemEnum menuItemEnum = MenuItemEnum.values()[ Integer.parseInt( ae.getActionCommand() ) ]; + + final JFileChooser fileChooser = new JFileChooser(); + switch ( menuItemEnum ) { + + case NEW : + break; + + case OPEN : + if ( fileChooser.showOpenDialog( mainFrame ) == JFileChooser.APPROVE_OPTION ) { + editedPolicyFile = fileChooser.getSelectedFile(); + activeEditorPanel.loadPolicyText( PolicyFileHandler.loadPoilcyFile( editedPolicyFile ) ); + } + break; + + case SAVE : + if ( editedPolicyFile == null ) { + if ( fileChooser.showSaveDialog( mainFrame ) == JFileChooser.APPROVE_OPTION ) + editedPolicyFile = fileChooser.getSelectedFile(); + } + if ( editedPolicyFile != null ) + if ( PolicyFileHandler.savePolicyFile( editedPolicyFile, activeEditorPanel.getPolicyText() ) ) + activeEditorPanel.setHasDirty( false ); + break; + + case SAVE_AS : + if ( fileChooser.showSaveDialog( mainFrame ) == JFileChooser.APPROVE_OPTION ) { + editedPolicyFile = fileChooser.getSelectedFile(); + if ( PolicyFileHandler.savePolicyFile( editedPolicyFile, activeEditorPanel.getPolicyText() ) ) + activeEditorPanel.setHasDirty( false ); + } + break; + + case VIEW_WARNING_LOG : + break; + + case EXIT : + exit(); + break; + + case EDIT : + break; + + } + + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/Controller.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/Controller.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/PolicyFileHandler.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/PolicyFileHandler.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/PolicyFileHandler.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/PolicyFileHandler.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,138 @@ +/* + * 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 org.apache.harmony.tools.policytool.control; + +import java.awt.Component; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; + +import javax.swing.JOptionPane; + +/** + * This class is responsible to read policy text from and write policy text to policy files.
+ * We're aware of the UTF-8 policy file encoding. + */ +public class PolicyFileHandler { + + /** Encoding of the policy file by the specification. */ + private static final String POLICY_FILE_ENCODING = "UTF-8"; + + /** Platform dependent line separator. */ + private static final String LINE_SEPARATOR = System.getProperty( "line.separator" ); + + /** Parent component to be used when displaying dialogs. */ + private static Component dialogParentComponent; + + /** + * Sets the parent component to be used when displaying dialogs. + * @param dialogParentComponent component to be used when displaying dialogs + */ + public static void setDialogParentComponent( final Component dialogParentComponent ) { + PolicyFileHandler.dialogParentComponent = dialogParentComponent; + } + + /** + * Loads the content of a policy file. + * @param policyFile policy file whose content to be loaded + * @return the policy text within the given policy file + */ + public static String loadPoilcyFile( final File policyFile ) { + final StringBuilder policyTextBuilder = new StringBuilder(); + + BufferedReader input = null; + try { + + input = new BufferedReader( new InputStreamReader( new FileInputStream( policyFile ), POLICY_FILE_ENCODING ) ); + String line; + while ( ( line = input.readLine() ) != null ) + policyTextBuilder.append( line ).append( LINE_SEPARATOR ); + + } + catch ( final FileNotFoundException fnfe ) { + JOptionPane.showMessageDialog( dialogParentComponent, "The file does not exist!", "Error", JOptionPane.ERROR_MESSAGE ); + return null; + } + catch ( final UnsupportedEncodingException uee ) { + // This should never happen. + uee.printStackTrace(); + return null; + } + catch ( final IOException ie ) { + JOptionPane.showMessageDialog( dialogParentComponent, new String[] { "I/O error occured, can't read the file!", ie.getMessage() }, "Error", JOptionPane.ERROR_MESSAGE ); + return null; + } + finally { + if ( input != null ) + try { + input.close(); + } + catch ( final IOException ie ) { + ie.printStackTrace(); + } + } + + return policyTextBuilder.toString(); + } + + /** + * Saves policy text to a policy file. + * @param policyFile policy file to save to + * @param policyText policy text to be saved + * @return true, if saving was successful; false otherwise + */ + public static boolean savePolicyFile( final File policyFile, final String policyText ) { + OutputStreamWriter output = null; + try { + output = new OutputStreamWriter( new FileOutputStream( policyFile ), POLICY_FILE_ENCODING ); + + output.write( policyText ); + + return true; + } + catch ( final UnsupportedEncodingException uee ) { + // This should never happen. + uee.printStackTrace(); + } + catch ( final FileNotFoundException ffe ) { + JOptionPane.showMessageDialog( dialogParentComponent, new String[] { "Cannot open file for writing!", ffe.getMessage() }, "Error", JOptionPane.ERROR_MESSAGE ); + ffe.printStackTrace(); + } catch ( final IOException ie ) { + JOptionPane.showMessageDialog( dialogParentComponent, new String[] { "Write error!", ie.getMessage() }, "Error", JOptionPane.ERROR_MESSAGE ); + ie.printStackTrace(); + } + finally { + if ( output != null ) + try { + output.close(); + } + catch ( final IOException ie ) { + ie.printStackTrace(); + } + } + + return false; + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/PolicyFileHandler.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/control/PolicyFileHandler.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/CommentEntry.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/CommentEntry.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/CommentEntry.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/CommentEntry.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,51 @@ +/* + * 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 org.apache.harmony.tools.policytool.model; + +/** + * Represents a comment entry which does not modify the access granted by the policy text which this belongs to.
+ * It may exist to: + *
    + *
  • separate, tag the policy text + *
  • hold informations, comments for the author or the user of the policy text + *
+ */ +public class CommentEntry extends PolicyEntry { + + /** Comment entries are not tokenized just holds the entry text "as is". */ + private String entryText; + + /** + * Creates a new CommentEntry. + * @param entryText policy entry text of the entry + */ + public CommentEntry( final String entryText ) { + setText( entryText ); + } + + @Override + public String getText() { + return entryText; + } + + @Override + public void setText( final String entryText ) { + this.entryText = entryText; + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/CommentEntry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/CommentEntry.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystoreEntry.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystoreEntry.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystoreEntry.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystoreEntry.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,78 @@ +/* + * 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 org.apache.harmony.tools.policytool.model; + +/** + * Represents the keystore entry of the policy text.
+ * There may be several keystore entries in a policy text, but only the first one is interpreted and used, the rest are ignored.
+ * The keystore entry must be provided if: + *
    + *
  • there are grant entries which specify signer aliases + *
  • or there are grant entries which specify principal aliases + *
+ * @see KeystorePasswordURLEntry + */ +public class KeystoreEntry extends PolicyEntry { + + /** Keyword of the keystore entry in the policy text. */ + public static final String KEYWORD = "keystore"; + + /** URL of the keystore. */ + private String url; + /** Type of the keystore. */ + private String type; + /** Provider of the keystore. */ + private String provider; + + @Override + public String getText() { + final StringBuilder textBuilder = new StringBuilder( KEYWORD ); + boolean firstParamAdded = false; + + if ( url != null ) { + textBuilder.append( " \"" ).append( url ).append( '"' ); + firstParamAdded = true; + } + + if ( type != null ) { + if ( firstParamAdded ) + textBuilder.append( ',' ); + else + firstParamAdded = true; + textBuilder.append( " \"" ).append( type ).append( '"' ); + } + + if ( provider != null ) { + if ( firstParamAdded ) + textBuilder.append( ',' ); + else + firstParamAdded = true; + textBuilder.append( " \"" ).append( provider ).append( '"' ); + } + + textBuilder.append( TERMINATOR_CHAR ); + + return textBuilder.toString(); + } + + @Override + public void setText( final String entryText ) { + // TODO Auto-generated method stub + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystoreEntry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystoreEntry.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystorePasswordURLEntry.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystorePasswordURLEntry.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystorePasswordURLEntry.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystorePasswordURLEntry.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,46 @@ +/* + * 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 org.apache.harmony.tools.policytool.model; + +/** + * Represents the keystore password URL entry of the policy text.
+ * Just as keystore entry there may be several keystore password URL entries in a policy text, + * but only the first one is interpreted and used, the rest are ignored.
+ * The entry specifies the location of the keystore password.
+ * The entry should be put next the the keystore entry. + * @see KeystoreEntry + */ +public class KeystorePasswordURLEntry extends PolicyEntry { + + /** Keyword of the keystore password URL entry in the policy text. */ + public static final String KEYWORD = "keystorePasswordURL"; + + /** URL of the keystore password. */ + private String url; + + @Override + public String getText() { + return KEYWORD + " \"" + url + '\"' + TERMINATOR_CHAR; + } + + @Override + public void setText( final String entryText ) { + // TODO Auto-generated method stub + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystorePasswordURLEntry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/KeystorePasswordURLEntry.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/PolicyEntry.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/PolicyEntry.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/PolicyEntry.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/PolicyEntry.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,40 @@ +/* + * 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 org.apache.harmony.tools.policytool.model; + +/** + * Abstract ancestor to represent a policy entry. + */ +public abstract class PolicyEntry { + + /** Terminator character of the policy entry texts. */ + public static final char TERMINATOR_CHAR = ';'; + + /** + * Returns the policy entry text. + * @return the policy entry text + */ + public abstract String getText(); + + /** + * Sets the policy entry text. + * @param entryText policy entry text to be set + */ + public abstract void setText( final String entryText ); + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/PolicyEntry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/model/PolicyEntry.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/DirectTextEditorPanel.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/DirectTextEditorPanel.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/DirectTextEditorPanel.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/DirectTextEditorPanel.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,77 @@ +/* + * 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 org.apache.harmony.tools.policytool.view; + +import java.awt.BorderLayout; +import java.awt.Font; + +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +import org.apache.harmony.tools.policytool.Consts; + +/** + * An editor panel which provides an interface for direct editing the policy text. + */ +public class DirectTextEditorPanel extends EditorPanel { + + /** Text area for direct editing the policy text. */ + private final JTextArea policyTextTextArea = new JTextArea(); + + /** + * Creates a new DirectTextEditorPanel.
+ * Sets a BorderLayout as the layout manager. + */ + public DirectTextEditorPanel() { + super( new BorderLayout(), false ); + + policyTextTextArea.setFont( new Font( "Courier New", Font.PLAIN, Consts.DIRECT_EDITING_FONT_SIZE ) ); + + // We want to track changes of the document so we can ask confirmation on exit + policyTextTextArea.getDocument().addDocumentListener( new DocumentListener() { + public void changedUpdate( final DocumentEvent de ) { + } + public void insertUpdate ( final DocumentEvent de ) { + setHasDirty( true ); + } + public void removeUpdate ( final DocumentEvent de ) { + setHasDirty( true ); + } + } ); + + add( new JScrollPane( policyTextTextArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS ), BorderLayout.CENTER ); + } + + @Override + public String getPanelTitle() { + return "Direct editing"; + } + + @Override + public void loadPolicyText( final String policyText ) { + policyTextTextArea.setText( policyText ); + } + + @Override + public String getPolicyText() { + return policyTextTextArea.getText(); + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/DirectTextEditorPanel.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/DirectTextEditorPanel.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/EditorPanel.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/EditorPanel.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/EditorPanel.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/EditorPanel.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,87 @@ +/* + * 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 org.apache.harmony.tools.policytool.view; + +import java.awt.LayoutManager; + +import javax.swing.JPanel; + +/** + * Defines an abstract editor panel which can provide a GUI for editing a policy text. + */ +public abstract class EditorPanel extends JPanel { + + /** Tells whether this editor panel has unsaved changes. */ + protected boolean hasDirty; + /** Tells whether this editor panel supports graphical keystore edit. */ + protected boolean supportsGraphicalKeystoreEdit; + + /** + * Creates a new EditorPanel.
+ * Awaits a layout manager to be sent to the super class. + * @param layoutManager layout manager to be used + * @param supportsGraphicalKeystoreEdit true if this editor panel supports graphical keystore edit; false otherwise + */ + public EditorPanel( final LayoutManager layoutManager, final boolean supportsGraphicalKeystoreEdit ) { + super( layoutManager ); + this.supportsGraphicalKeystoreEdit = supportsGraphicalKeystoreEdit; + } + + /** + * Returns the title of the panel. + * @return the title of the panel + */ + public abstract String getPanelTitle(); + + /** + * Loads the specified policy text into the editor panel. + * @param policyText policy text to be loaded + */ + public abstract void loadPolicyText( final String policyText ); + + /** + * Returns the policy text hold by this editor panel. + * @return the policy text hold by this editor panel + */ + public abstract String getPolicyText(); + + /** + * Tells whether this editor panel has unsaved changes. + * @return true if the editor panel has unsaved changes + */ + public boolean getHasDirty() { + return hasDirty; + } + + /** + * Sets the hasDirty property. + * @param hasDirty value of hasDirty to be set + */ + public void setHasDirty( final boolean hasDirty ) { + this.hasDirty = hasDirty; + } + + /** + * Tells whether this editor panel supports graphical keystore edit. + * @return true if this editor panel supports graphical keystore edit; false otherwise + */ + public boolean supportsGraphicalKeystoreEdit() { + return supportsGraphicalKeystoreEdit; + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/EditorPanel.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/EditorPanel.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/GraphicalEditorPanel.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/GraphicalEditorPanel.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/GraphicalEditorPanel.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/GraphicalEditorPanel.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,59 @@ +/* + * 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 org.apache.harmony.tools.policytool.view; + +import java.awt.BorderLayout; +import java.util.List; + +import org.apache.harmony.tools.policytool.model.PolicyEntry; + +/** + * An editor panel which provides an interface for direct editing the policy text. + */ +public class GraphicalEditorPanel extends EditorPanel { + + /** Holds the invalid policy text or null if the loaded policy text is valid. */ + private String invalidPolicyText; + + /** The list of the policy text's entries or null if invalid policy text was loaded. */ + private List< PolicyEntry > policyEntryList; + + /** + * Creates a new GraphicalEditorPanel.
+ * Sets a BorderLayout as the layout manager. + */ + public GraphicalEditorPanel() { + super( new BorderLayout(), true ); + } + + @Override + public String getPanelTitle() { + return "Graphical editing"; + } + + @Override + public void loadPolicyText( final String policyText ) { + this.invalidPolicyText = policyText; + } + + @Override + public String getPolicyText() { + return invalidPolicyText; + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/GraphicalEditorPanel.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/GraphicalEditorPanel.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/MainFrame.java URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/MainFrame.java?rev=672793&view=auto ============================================================================== --- harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/MainFrame.java (added) +++ harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/MainFrame.java Mon Jun 30 08:23:03 2008 @@ -0,0 +1,197 @@ +/* + * 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 org.apache.harmony.tools.policytool.view; + +import java.awt.BorderLayout; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JTabbedPane; + +import org.apache.harmony.tools.policytool.Consts; +import org.apache.harmony.tools.policytool.control.Controller; + +/** + * This is the main frame of policytool. + */ +public class MainFrame extends JFrame { + + /** + * Creates a new MainFrame with no initial poilcy file. + */ + public MainFrame() { + this( null ); + } + + /** + * Creates a new MainFrame. + * @param policyFileName policy file name to be loaded initially + */ + public MainFrame( final String policyFileName ) { + super( Consts.APPLICATION_NAME ); + + final EditorPanel[] editorPanels = new EditorPanel[] { new GraphicalEditorPanel(), new DirectTextEditorPanel() }; + final Controller controller = new Controller( this, editorPanels, policyFileName ); + + buildGUI( controller ); + + setLocation( Consts.MAIN_FRAME_START_POS_X, Consts.MAIN_FRAME_START_POS_X ); + setSize( 400, 400 ); + setDefaultCloseOperation( DO_NOTHING_ON_CLOSE ); + addWindowListener( new WindowAdapter() { + public void windowClosing( final WindowEvent we ) { + controller.exit(); + } + } ); + } + + /** + * Builds the graphical user interface of the main frame. + * @param controller reference to the controller + */ + private void buildGUI( final Controller controller ) { + buildMenusAndMenuBar( controller ); + buildTabbedPane ( controller ); + } + + /** + * Menu items of policytool. + */ + public static enum MenuItemEnum { + /** File menu */ + FILE ( true, "File" ), + /** New menu item */ + NEW ( "New" ), + /** Save menu item */ + OPEN ( "Open" ), + /** Save menu item */ + SAVE ( "Save" ), + /** Save as menu item */ + SAVE_AS ( "Save As...", 'a' ), + /** View warning log menu item */ + VIEW_WARNING_LOG( "View Warning Log" ), + /** Exit menu item */ + EXIT ( "Exit", 'x' ), + /** KeyStore menu */ + KEY_STORE ( true, "KeyStore" ), + /** Edit menu item */ + EDIT ( "Edit" ); + + /** If true, then this represents a menu instead of a menu item. */ + public final boolean isMenu; + /** Text of the menu item. */ + public final String text; + /** Mnemonic for the menu item. */ + public final char mnemonic; + + /** + * Creates a new MenuItemEnum with a default mnemonic of the first character of its text. + * @param isMenu indicating if this will be a menu + * @param text text of the menu item + */ + private MenuItemEnum( final boolean isMenu, final String text ) { + this( isMenu, text, text.charAt( 0 ) ); + } + + /** + * Creates a new MenuItemEnum with a default mnemonic of the first character of its text. + * @param text text of the menu item + */ + private MenuItemEnum( final String text ) { + this( false, text, text.charAt( 0 ) ); + } + + /** + * Creates a new MenuItemEnum. + * @param text text of the menu item + * @param mnemonic mnemonic for the menu item + */ + private MenuItemEnum( final String text, final char mnemonic ) { + this( false, text, mnemonic ); + } + + /** + * Creates a new MenuItemEnum. + * @param isMenu indicating if this will be a menu + * @param text text of the menu item + * @param mnemonic mnemonic for the menu item + */ + private MenuItemEnum( final boolean isMenu, final String text, final char mnemonic ) { + this.isMenu = isMenu; + this.text = text; + this.mnemonic = mnemonic; + } + + }; + + /** + * Builds the menus and the menu bar. + * @param controller reference to the controller + */ + private void buildMenusAndMenuBar( final Controller controller ) { + final JMenuBar menuBar = new JMenuBar(); + + JMenu menu = null; + for ( final MenuItemEnum menuItemEnum : MenuItemEnum.values() ) { + if ( menuItemEnum.isMenu ) { + menu = new JMenu( menuItemEnum.text ); + menu.setMnemonic( menuItemEnum.mnemonic ); + menuBar.add( menu ); + } + else { + final JMenuItem menuItem = new JMenuItem( menuItemEnum.text ); + menuItem.setMnemonic( menuItemEnum.mnemonic ); + menuItem.addActionListener( controller ); + menuItem.setActionCommand( Integer.toString( menuItemEnum.ordinal() ) ); + menu.add( menuItem ); + if ( menuItemEnum == MenuItemEnum.EDIT ) + controller.setKeystoreEditMenuItem( menuItem ); + } + } + + setJMenuBar( menuBar ); + } + + /** + * Builds the tabbed pane containing the editor panels. + * @param controller reference to the controller + */ + private void buildTabbedPane( final Controller controller ) { + final JTabbedPane tabbedPane = new JTabbedPane(); + final EditorPanel[] editorPanels = controller.getEditorPanels(); + + for ( int i = 0; i < editorPanels.length; i++ ) { + final EditorPanel editorPanel = editorPanels[ i ]; + final String panelTitle = (i+1) + " " + editorPanel.getPanelTitle(); + + tabbedPane.addTab( panelTitle, editorPanel ); + + if ( i < 9 ) // We only set 1..9 mnemonic characters + tabbedPane.setMnemonicAt( i, '1' + i ); + } + + tabbedPane.addChangeListener( controller ); + + add( tabbedPane , BorderLayout.CENTER ); + } + +} Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/MainFrame.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: harmony/enhanced/jdktools/trunk/modules/tools/src/main/java/org/apache/harmony/tools/policytool/view/MainFrame.java ------------------------------------------------------------------------------ svn:mime-type = text/plain