/*
* Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is
* subject to license terms.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the Lesser GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.util.Iterator;
import org.jdesktop.jdic.filetypes.Action;
import org.jdesktop.jdic.filetypes.Association;
import org.jdesktop.jdic.filetypes.AssociationService;
import org.jdesktop.jdic.filetypes.AssociationAlreadyRegisteredException;
import org.jdesktop.jdic.filetypes.AssociationNotRegisteredException;
import org.jdesktop.jdic.filetypes.RegisterFailedException;
/**
* JDIC API demo main class.
* <p>
* The <code>FileTypes</code> class creates a dialog to retrieve/register/unregister
* file type associations in user level or system level.
*/
public class FileTypes extends JDialog {
final static int SELECT_REGISTER_SYSTEM = 1;
final static int SELECT_REGISTER_USER = 2;
final static int SELECT_UNREGISTER_SYSTEM = 3;
final static int SELECT_UNREGISTER_USER = 4;
final static int SELECT_GET_EXT = 5;
final static int SELECT_GET_MIME = 6;
final static int SELECT_NONE = 0;
int selectOption = SELECT_NONE;
ButtonGroup buttonOperationGroup = new ButtonGroup();
DefaultListModel actionsListModel = new DefaultListModel();
JPanel jAssociationContentPanel = new JPanel();
JPanel jAssociationButtonPanel = new JPanel();
JPanel jFieldsPanel = new JPanel();
JPanel jOptionsPanel = new JPanel();
JPanel jNoActionsFieldPanel = new JPanel();
JPanel jActionsFieldPanel = new JPanel();
JPanel jNewActionPanel = new JPanel();
JLabel jDescriptionLabel = new JLabel();
JLabel jNameLabel = new JLabel();
JLabel jMimeTypeLabel = new JLabel();
JLabel jFileExtensionListLabel = new JLabel();
JLabel jIconFileLabel = new JLabel();
JTextField jDescriptionTextField = new JTextField();
JTextField jNameTextField = new JTextField();
JTextField jMimeTypeTextField = new JTextField();
JTextField jFileExtensionListTextField = new JTextField();
JTextField jIconFileTextField = new JTextField();
JLabel jActionsLabel = new JLabel();
JTextField jNewActionTextField = new JTextField();
JButton jAddNewActionButton = new JButton();
JList jActionsList = new JList(actionsListModel);
JRadioButton jRadioButtonUnregisterUser = new JRadioButton();
JRadioButton jRadioButtonRegisterUser = new JRadioButton();
JRadioButton jRadioButtonRegisterSys = new JRadioButton();
JRadioButton jRadioButtonUnregisterSys = new JRadioButton();
JButton jCancelButton = new JButton();
JButton jApplyButton = new JButton();
TitledBorder titledBorderOptions;
TitledBorder titledBorderFields;
JPanel jPanelGetByExt = new JPanel();
JRadioButton jRadioButtonGetExt = new JRadioButton();
JTextField jTextFieldGetExt = new JTextField();
JPanel jPanelGetByMime = new JPanel();
JRadioButton jRadioButtonGetMime = new JRadioButton();
JTextField jTextFieldGetMime = new JTextField();
JPanel jPanelGetExt = new JPanel();
JPanel jPanelGetMime = new JPanel();
public FileTypes() throws HeadlessException {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws HeadlessException {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {}
FileTypes FileTypes = new FileTypes();
FileTypes.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
FileTypes.setVisible(true);
}
private void jbInit() throws Exception {
this.setResizable(false);
this.setTitle("JDIC API Demo - File Associations");
this.setSize(800, 600);
// Center the dialog.
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension dlgSize = this.getSize();
if (dlgSize.height > screenSize.height) {
dlgSize.height = screenSize.height;
}
if (dlgSize.width > screenSize.width) {
dlgSize.width = screenSize.width;
}
this.setLocation((screenSize.width - dlgSize.width) / 2,
(screenSize.height - dlgSize.height) / 2);
this.getContentPane().setLayout(new BorderLayout());
titledBorderOptions = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,
new Color(148, 145, 140)),
"Association Operations:");
titledBorderFields = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,
new Color(148, 145, 140)),
"Association Fields:");
jOptionsPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
jOptionsPanel.setLayout(new GridLayout(10, 1));
jOptionsPanel.setBorder(titledBorderOptions);
jRadioButtonRegisterSys.setText("Register System-level Association");
jRadioButtonRegisterUser.setText("Register User-level Association");
jRadioButtonUnregisterSys.setText("Unregister System-level Association");
jRadioButtonUnregisterUser.setText("Unregister User-level Association");
jDescriptionLabel.setText("Description:");
jNameLabel.setText("MIME File Name:");
jFileExtensionListLabel.setText("File Extension List:");
jMimeTypeLabel.setText("Mime Type:");
jIconFileLabel.setText("Icon File:");
jNoActionsFieldPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
jNoActionsFieldPanel.setLayout(new GridLayout(10, 1));
jRadioButtonGetExt.setText("Get Association by File Extension");
jRadioButtonGetExt.addItemListener(new FileTypes_jRadioButtonGetExt_itemAdapter(this));
jTextFieldGetExt.setPreferredSize(new Dimension(40, 22));
jTextFieldGetExt.setText("");
jTextFieldGetExt.setEnabled(false);
jTextFieldGetExt.setHorizontalAlignment(SwingConstants.LEADING);
jRadioButtonGetMime.setText("Get Association by Mime Type");
jRadioButtonGetMime.addItemListener(new FileTypes_jRadioButtonGetMime_itemAdapter(this));
jTextFieldGetMime.setText("");
jTextFieldGetMime.setEnabled(false);
jNoActionsFieldPanel.add(jDescriptionLabel, null);
jNoActionsFieldPanel.add(jDescriptionTextField, null);
jNoActionsFieldPanel.add(jNameLabel, null);
jNoActionsFieldPanel.add(jNameTextField, null);
jNoActionsFieldPanel.add(jMimeTypeLabel, null);
jNoActionsFieldPanel.add(jMimeTypeTextField, null);
jNoActionsFieldPanel.add(jFileExtensionListLabel, null);
jNoActionsFieldPanel.add(jFileExtensionListTextField, null);
jNoActionsFieldPanel.add(jIconFileLabel, null);
jNoActionsFieldPanel.add(jIconFileTextField, null);
jActionsLabel.setText("Actions:");
jAddNewActionButton.setText("Add");
jAddNewActionButton.addActionListener(
new FileTypes_jAddNewActionButton_actionAdapter(this));
jNewActionPanel.setLayout(new BorderLayout());
jNewActionTextField.setText("");
jNewActionPanel.add(jNewActionTextField, BorderLayout.CENTER);
jNewActionPanel.add(jAddNewActionButton, BorderLayout.EAST);
jActionsFieldPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
jActionsFieldPanel.setLayout(new BorderLayout());
jActionsFieldPanel.add(jActionsLabel, BorderLayout.NORTH);
jActionsFieldPanel.add(jNewActionPanel, BorderLayout.CENTER);
jActionsFieldPanel.add(new JScrollPane(jActionsList), BorderLayout.SOUTH);
jFieldsPanel.setBorder(titledBorderFields);
jFieldsPanel.setLayout(new BorderLayout());
jFieldsPanel.add(jNoActionsFieldPanel, BorderLayout.CENTER);
jFieldsPanel.add(jActionsFieldPanel, BorderLayout.SOUTH);
jRadioButtonRegisterSys.addActionListener(
new FileTypes_jRadioButtonRegisterSys_actionAdapter(this));
jRadioButtonRegisterUser.addActionListener(
new FileTypes_jRadioButtonRegisterUser_actionAdapter(this));
jRadioButtonUnregisterSys.addActionListener(
new FileTypes_jRadioButtonUnregisterSys_actionAdapter(this));
jRadioButtonUnregisterUser.addActionListener(
new FileTypes_jRadioButtonUnregisterUser_actionAdapter(this));
buttonOperationGroup.add(jRadioButtonUnregisterUser);
buttonOperationGroup.add(jRadioButtonUnregisterSys);
buttonOperationGroup.add(jRadioButtonRegisterUser);
buttonOperationGroup.add(jRadioButtonRegisterSys);
jOptionsPanel.add(jRadioButtonRegisterSys, null);
jOptionsPanel.add(jRadioButtonRegisterUser, null);
jOptionsPanel.add(jRadioButtonUnregisterSys, null);
jOptionsPanel.add(jRadioButtonUnregisterUser, null);
jOptionsPanel.add(jPanelGetByExt, null);
jOptionsPanel.add(jPanelGetByMime, null);
jPanelGetByExt.setLayout(new BorderLayout());
jPanelGetByExt.add(jRadioButtonGetExt, BorderLayout.NORTH);
jPanelGetByExt.add(jPanelGetExt, BorderLayout.CENTER);
jPanelGetExt.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
jPanelGetExt.setLayout(new BorderLayout());
jPanelGetExt.add(jTextFieldGetExt, BorderLayout.CENTER);
jPanelGetByMime.setLayout(new BorderLayout());
jPanelGetByMime.add(jRadioButtonGetMime, BorderLayout.NORTH);
jPanelGetByMime.add(jPanelGetMime, BorderLayout.CENTER);
jPanelGetMime.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
jPanelGetMime.setLayout(new BorderLayout());
jPanelGetMime.add(jTextFieldGetMime, BorderLayout.CENTER);
jAssociationContentPanel.setBorder(BorderFactory.createEmptyBorder(5, 5,
0, 5));
jAssociationContentPanel.setLayout(new BorderLayout());
jAssociationContentPanel.add(jOptionsPanel, BorderLayout.WEST);
jAssociationContentPanel.add(jFieldsPanel, BorderLayout.CENTER);
jCancelButton.setText("Cancel");
jCancelButton.addActionListener(new FileTypes_jCancelButton_actionAdapter(this));
jApplyButton.setText("Apply");
jApplyButton.addActionListener(new FileTypes_jApplyButton_actionAdapter(this));
jAssociationButtonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5,
5, 5));
jAssociationButtonPanel.add(jApplyButton, null);
jAssociationButtonPanel.add(jCancelButton, null);
this.getContentPane().add(jAssociationContentPanel, BorderLayout.CENTER);
this.getContentPane().add(jAssociationButtonPanel, BorderLayout.SOUTH);
buttonOperationGroup.add(jRadioButtonGetExt);
buttonOperationGroup.add(jRadioButtonGetMime);
}
/**
* Get the association fields specified by the user in the right panel.
* And fill into the constructed Association object.
*/
private Association getAssociationFields() {
Association assoc = new Association();
String description = jDescriptionTextField.getText();
if ((description != null) && (description.length() != 0)) {
assoc.setDescription(description);
}
String name = jNameTextField.getText();
if ((name != null) && (name.length() != 0)) {
assoc.setName(name);
}
String mimeType = jMimeTypeTextField.getText();
if ((mimeType != null) && (mimeType.length() != 0)) {
assoc.setMimeType(mimeType);
}
String fileExtensionListString = jFileExtensionListTextField.getText().trim();
if ((fileExtensionListString != null)
&& (fileExtensionListString.length() != 0)) {
String leftExtString = fileExtensionListString;
int startIndex = 0;
int nextSpacePos = fileExtensionListString.indexOf(' ');
while (nextSpacePos != -1) {
String oneExt = leftExtString.substring(startIndex, nextSpacePos);
assoc.addFileExtension(oneExt);
String tempString = leftExtString.substring(nextSpacePos,
leftExtString.length());
leftExtString = tempString.trim();
nextSpacePos = leftExtString.indexOf(' ');
}
if ((leftExtString != null) && (leftExtString.length()) != 0) {
// one last file extension.
assoc.addFileExtension(leftExtString);
}
}
String iconFile = jIconFileTextField.getText();
if ((iconFile != null) && (iconFile.length() != 0)) {
assoc.setIconFileName(iconFile);
}
int actionNum = actionsListModel.getSize();
if (actionNum != 0) {
for (int i = 0; i < actionNum; i++) {
String oneActionString = (String) actionsListModel.getElementAt(i);
int firstSpacePos = oneActionString.indexOf(' ');
String verb = oneActionString.substring(0, firstSpacePos);
String leftStr = oneActionString.substring(firstSpacePos,
oneActionString.length());
String command = leftStr.trim();
Action oneAction = new Action(verb, command);
assoc.addAction(oneAction);
}
}
return assoc;
}
/**
* Put the given association into the association fields in the right panel.
*/
private void putAssociationFields(Association assoc) {
jDescriptionTextField.setText(assoc.getDescription());
jNameTextField.setText(assoc.getName());
jMimeTypeTextField.setText(assoc.getMimeType());
if (assoc.getFileExtList() == null) {
jFileExtensionListTextField.setText(null);
} else {
Iterator extentionIter = assoc.getFileExtList().iterator();
String fileExtensionListString = (String) extentionIter.next();
while (extentionIter.hasNext()) {
fileExtensionListString += ' ' + (String) extentionIter.next();
}
jFileExtensionListTextField.setText(fileExtensionListString);
}
jIconFileTextField.setText(assoc.getIconFileName());
// Clear the old action list first before adding new actions.
actionsListModel.removeAllElements();
if (assoc.getActionList() != null) {
Iterator actionIter = assoc.getActionList().iterator();
while (actionIter.hasNext()) {
Action oneAction = (Action) actionIter.next();
String oneVerb = oneAction.getVerb();
String oneCommand = oneAction.getCommand();
String oneActionString = oneVerb + ' ' + oneCommand;
actionsListModel.addElement(oneActionString);
}
}
}
void jAddNewActionButton_actionPerformed(ActionEvent e) {
String newActionString = jNewActionTextField.getText();
if ((newActionString != null) && (newActionString.length() != 0)
&& (newActionString.indexOf(' ') != -1)) {
int firstSpacePos = newActionString.indexOf(' ');
String verb = newActionString.substring(0, firstSpacePos);
String command = newActionString.substring(firstSpacePos, newActionString.length()).trim();
actionsListModel.insertElementAt (verb + ' ' + command, 0);
} else {
JOptionPane.showMessageDialog(this,
"A valid action string should be like: open C:\\temp\\notepad.exe.",
"Warning", JOptionPane.WARNING_MESSAGE);
}
}
void jApplyButton_actionPerformed(ActionEvent e) {
if (selectOption == SELECT_NONE) {
JOptionPane.showMessageDialog(this,
"Please select an association operation in the left panel.",
"Warning", JOptionPane.WARNING_MESSAGE);
} else {
AssociationService assocService = new AssociationService();
try {
switch (selectOption) {
case SELECT_REGISTER_SYSTEM: {
// Get specified association fields, and fill in the constructed Association object.
Association assoc = getAssociationFields();
assocService.registerSystemAssociation(assoc);
}
break;
case SELECT_REGISTER_USER: {
Association assoc = getAssociationFields();
assocService.registerUserAssociation(assoc);
}
break;
case SELECT_UNREGISTER_SYSTEM: {
Association assoc = getAssociationFields();
assocService.unregisterSystemAssociation(assoc);
}
break;
case SELECT_UNREGISTER_USER: {
Association assoc = getAssociationFields();
assocService.unregisterUserAssociation(assoc);
}
break;
case SELECT_GET_EXT: {
String inputFileExt = jTextFieldGetExt.getText();
Association assoc = null;
if ((inputFileExt != null) && (inputFileExt.length() != 0)) {
assoc = assocService.getFileExtensionAssociation(inputFileExt);
}
if (assoc == null) {
JOptionPane.showMessageDialog(this,
"No association with the given file extension: "
+ inputFileExt,
"Warning",
JOptionPane.WARNING_MESSAGE);
} else {
putAssociationFields(assoc);
}
}
break;
case SELECT_GET_MIME: {
String inputMimeType = jTextFieldGetMime.getText();
Association assoc = null;
if ((inputMimeType != null) && (inputMimeType.length() != 0)) {
assoc = assocService.getMimeTypeAssociation(inputMimeType);
}
if (assoc == null) {
JOptionPane.showMessageDialog(this,
"No association with the given MIME type: "
+ inputMimeType,
"Warning",
JOptionPane.WARNING_MESSAGE);
} else {
putAssociationFields(assoc);
}
}
break;
default: {
// The switch should never come here.
JOptionPane.showMessageDialog(this,
"Demo bug: the demo should NEVER get here.",
"Error", JOptionPane.ERROR_MESSAGE);
}
break;
} // end of switch
} catch (AssociationAlreadyRegisteredException arException) {
JOptionPane.showMessageDialog(this,
arException.toString(), "Exception", JOptionPane.ERROR_MESSAGE);
} catch (AssociationNotRegisteredException nrException) {
JOptionPane.showMessageDialog(this,
nrException.toString(), "Exception", JOptionPane.ERROR_MESSAGE);
} catch (RegisterFailedException rfException) {
JOptionPane.showMessageDialog(this,
rfException.toString(), "Exception", JOptionPane.ERROR_MESSAGE);
}
}
}
void jCancelButton_actionPerformed(ActionEvent e) {
System.exit(0);
}
void jRadioButtonRegisterSys_actionPerformed(ActionEvent e) {
selectOption = SELECT_REGISTER_SYSTEM;
}
void jRadioButtonRegisterUser_actionPerformed(ActionEvent e) {
selectOption = SELECT_REGISTER_USER;
}
void jRadioButtonUnregisterSys_actionPerformed(ActionEvent e) {
selectOption = SELECT_UNREGISTER_SYSTEM;
}
void jRadioButtonUnregisterUser_actionPerformed(ActionEvent e) {
selectOption = SELECT_UNREGISTER_USER;
}
void jRadioButtonGetExt_itemStateChanged(ItemEvent e) {
if (jRadioButtonGetExt.isSelected()) {
selectOption = SELECT_GET_EXT;
jTextFieldGetExt.setEnabled(true);
} else {
jTextFieldGetExt.setEnabled(false);
}
}
void jRadioButtonGetMime_itemStateChanged(ItemEvent e) {
if (jRadioButtonGetMime.isSelected()) {
selectOption = SELECT_GET_MIME;
jTextFieldGetMime.setEnabled(true);
} else {
jTextFieldGetMime.setEnabled(false);
}
}
}
class FileTypes_jAddNewActionButton_actionAdapter implements java.awt.event.ActionListener {
FileTypes adaptee;
FileTypes_jAddNewActionButton_actionAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jAddNewActionButton_actionPerformed(e);
}
}
class FileTypes_jApplyButton_actionAdapter implements java.awt.event.ActionListener {
FileTypes adaptee;
FileTypes_jApplyButton_actionAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jApplyButton_actionPerformed(e);
}
}
class FileTypes_jCancelButton_actionAdapter implements java.awt.event.ActionListener {
FileTypes adaptee;
FileTypes_jCancelButton_actionAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jCancelButton_actionPerformed(e);
}
}
class FileTypes_jRadioButtonRegisterSys_actionAdapter
implements java.awt.event.ActionListener {
FileTypes adaptee;
FileTypes_jRadioButtonRegisterSys_actionAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jRadioButtonRegisterSys_actionPerformed(e);
}
}
class FileTypes_jRadioButtonRegisterUser_actionAdapter
implements java.awt.event.ActionListener {
FileTypes adaptee;
FileTypes_jRadioButtonRegisterUser_actionAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jRadioButtonRegisterUser_actionPerformed(e);
}
}
class FileTypes_jRadioButtonUnregisterSys_actionAdapter
implements java.awt.event.ActionListener {
FileTypes adaptee;
FileTypes_jRadioButtonUnregisterSys_actionAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jRadioButtonUnregisterSys_actionPerformed(e);
}
}
class FileTypes_jRadioButtonUnregisterUser_actionAdapter
implements java.awt.event.ActionListener {
FileTypes adaptee;
FileTypes_jRadioButtonUnregisterUser_actionAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jRadioButtonUnregisterUser_actionPerformed(e);
}
}
class FileTypes_jRadioButtonGetExt_itemAdapter implements java.awt.event.ItemListener {
FileTypes adaptee;
FileTypes_jRadioButtonGetExt_itemAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.jRadioButtonGetExt_itemStateChanged(e);
}
}
class FileTypes_jRadioButtonGetMime_itemAdapter implements java.awt.event.ItemListener {
FileTypes adaptee;
FileTypes_jRadioButtonGetMime_itemAdapter(FileTypes adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.jRadioButtonGetMime_itemStateChanged(e);
}
}