You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sj...@apache.org on 2008/06/30 17:23:04 UTC

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/...

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 @@
         <copy file="${hy.samsa.exe}" tofile="${jdktools.deploy.dir}/bin/unpack200${exe.suffix}" />
         <chmod file="${jdktools.deploy.dir}/bin/unpack200${exe.suffix}" perm="ugo+x" />
 
+        <copy file="${hy.samsa.exe}" tofile="${jdktools.deploy.dir}/bin/policytool${exe.suffix}" />
+        <chmod file="${jdktools.deploy.dir}/bin/policytool${exe.suffix}" perm="ugo+x" />
+
     </target>
 
     <!-- copy windows javaw executable -->

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.<br>
+     * Currently only one option is supported:
+     * <pre><code>    [-file file]</code></pre>
+     * 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;<br>
+     *         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 <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.<br>
+	 * 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.<br>
+ * 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.<br>
+ * It may exist to:
+ * <ul>
+ *     <li>separate, tag the policy text
+ *     <li>hold informations, comments for the author or the user of the policy text
+ * </ul> 
+ */
+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.<br>
+ * There may be several keystore entries in a policy text, but only the first one is interpreted and used, the rest are ignored.<br>
+ * The keystore entry must be provided if:
+ * <ul>
+ *     <li>there are grant entries which specify signer aliases
+ *     <li>or there are grant entries which specify principal aliases
+ * </ul>
+ * @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.<br>
+ * 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.<br>
+ * The entry specifies the location of the keystore password.<br>
+ * 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.<br>
+	 * 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.<br>
+	 * 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.<br>
+	 * 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 <code>MainFrame</code> with no initial poilcy file.
+	 */
+	public MainFrame() {
+		this( null );
+	}
+	
+	/**
+	 * Creates a new <code>MainFrame</code>.
+	 * @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