Code Search for Developers
 
 
  

ResourceSettings.java from Magellan-Client at Krugle


Show ResourceSettings.java syntax highlighted

/*
 *  Copyright (C) 2000-2004 Roger Butenuth, Andreas Gampe,
 *                          Stefan Goetz, Sebastian Pappert,
 *                          Klaas Prause, Enno Rehling,
 *                          Sebastian Tusk, Ulrich Kuester,
 *                          Ilja Pavkovic
 *
 * This file is part of the Eressea Java Code Base, see the
 * file LICENSING for the licensing information applying to
 * this file.
 *
 */

package com.eressea.resource;

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;

import com.eressea.swing.InternationalizedPanel;
import com.eressea.swing.preferences.ExtendedPreferencesAdapter;
import com.eressea.swing.preferences.PathPreferencesAdapter;
import com.eressea.util.CollectionFactory;

/**
 * TODO: DOCUMENT ME!
 *
 * @author $author$
 * @version $Revision: 269 $
 */
public class ResourceSettings extends InternationalizedPanel implements ExtendedPreferencesAdapter {
	private JButton btnAdd = null;
	private JButton btnRemove = null;
	private JButton btnEdit = null;
	private JList lstPaths = null;
	private Properties settings = null;
	private List subAdapter;

	/**
	 * Creates a new ResourceSettings object.
	 *
	 * @param settings TODO: DOCUMENT ME!
	 */
	public ResourceSettings(Properties settings) {
		this.settings = settings;
		initComponents();
	}

	private void initComponents() {
		this.setLayout(new java.awt.GridBagLayout());

		this.lstPaths = new JList(getWrappedURLs(ResourcePathClassLoader.getStaticPaths())); // later we need to assume that this list's model is a DefaultListModel!
		this.lstPaths.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		GridBagConstraints c = new java.awt.GridBagConstraints();
		c.gridheight = 3;
		c.fill = GridBagConstraints.BOTH;
		c.insets = new java.awt.Insets(5, 5, 5, 5);
		c.weightx = 0.1;
		c.weighty = 0.1;
		this.add(new JScrollPane(lstPaths, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
								 JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS), c);

		this.btnAdd = new JButton(getString("btn.new.caption"));
		this.btnAdd.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent evt) {
					btnAddActionPerformed(evt);
				}
			});

		c.gridheight = 1;
		c.gridx = 1;
		c.gridy = 0;
		c.fill = java.awt.GridBagConstraints.HORIZONTAL;
		c.insets = new java.awt.Insets(5, 0, 5, 5);
		c.weightx = 0.0;
		c.weighty = 0.0;
		this.add(btnAdd, c);

		this.btnRemove = new JButton(getString("btn.remove.caption"));
		btnRemove.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent evt) {
					btnRemoveActionPerformed(evt);
				}
			});

		c.gridx = 1;
		c.gridy = 1;
		c.insets = new java.awt.Insets(0, 0, 5, 5);
		add(btnRemove, c);

		this.btnEdit = new JButton(getString("btn.edit.caption"));
		btnEdit.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent evt) {
					btnEditActionPerformed(evt);
				}
			});

		c.gridx = 1;
		c.gridy = 2;
		c.insets = new java.awt.Insets(0, 0, 5, 5);
		c.anchor = java.awt.GridBagConstraints.NORTH;
		add(btnEdit, c);

		subAdapter = CollectionFactory.createArrayList(1);

		PathPreferencesAdapter ppa = new PathPreferencesAdapter(settings);
		ppa.addPath("ECheck:", "JECheckPanel.echeckEXE");
		ppa.addPath("Vorlage:", "JVorlage.vorlageFile");
		subAdapter.add(ppa);
		subAdapter.add(new com.eressea.extern.ExternalModuleSettings(settings));
	}

	/**
	 * TODO: DOCUMENT ME!
	 *
	 * @return TODO: DOCUMENT ME!
	 */
	public List getChildren() {
		return subAdapter;
	}

	private void btnEditActionPerformed(java.awt.event.ActionEvent evt) {
		if(lstPaths.getSelectedValue() == null) {
			return;
		}

		Component parent = this.getTopLevelAncestor();
		URLWrapper w = (URLWrapper) lstPaths.getSelectedValue();

		if((w != null) && (w.url != null)) {
			Object selectionValues[] = { w.toString() };
			String input = (String) JOptionPane.showInputDialog(parent, getString("msg.edit.text"),
																getString("msg.edit.title"),
																JOptionPane.PLAIN_MESSAGE, null,
																null, selectionValues[0]);

			if(input != null) {
				if(input.startsWith("http")) {
					try {
						w.url = new URL(input);
					} catch(MalformedURLException mue) {
						JOptionPane.showMessageDialog(parent, getString("msg.invalidformat.text"));
					}
				} else {
					File f = new File(input);

					if(!f.exists()) {
						if(JOptionPane.showConfirmDialog(parent,
															 getString("msg.usenonexisting.text"),
															 getString("msg.usenonexisting.title"),
															 JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
							try {
								w.url = new URL(input);
							} catch(MalformedURLException mue) {
								JOptionPane.showMessageDialog(parent,
															  getString("msg.invalidformat.text"));
							}
						}
					} else {
						try {
							w.url = f.toURL();
						} catch(MalformedURLException mue) {
							JOptionPane.showMessageDialog(parent,
														  getString("msg.invalidformat.text"));
						}
					}
				}
			}
		}
	}

	private void btnRemoveActionPerformed(java.awt.event.ActionEvent evt) {
		if(this.lstPaths.getSelectedValue() != null) {
			((DefaultListModel) this.lstPaths.getModel()).removeElementAt(this.lstPaths.getSelectedIndex());
		}
	}

	private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
		URLWrapper urlWrapper = null;
		Component parent = this.getTopLevelAncestor();

		javax.swing.JFileChooser fc = new javax.swing.JFileChooser();
		fc.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);

		if(fc.showOpenDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION) {
			java.io.File file = fc.getSelectedFile();

			try {
				if(file.exists()) {
					if(file.isDirectory()) {
						urlWrapper = new URLWrapper(file.toURL());
					} else {
						urlWrapper = new URLWrapper(new URL("jar:" + file.toURL().toString() +
															"!/"));
					}
				} else {
					String name = file.getName();
					String parentName = "";

					if(file.getParentFile() != null) {
						parentName = file.getParentFile().getName();
					}

					if(!name.equals("") && name.equals(parentName)) {
						// in this case the user double clicked a directory instead of just selecting it
						urlWrapper = new URLWrapper(file.getParentFile().toURL());
					} else {
						JOptionPane.showMessageDialog(parent, getString("msg.nonexistingfile.text"));
					}
				}
			} catch(MalformedURLException ex) {
				JOptionPane.showMessageDialog(parent,
											  getString("msg.urlexception.text") + " " +
											  ex.toString());
			}
		}

		((DefaultListModel) this.lstPaths.getModel()).insertElementAt(urlWrapper, 0);
	}

    public void initPreferences() {
        // TODO: implement it
    }

	/**
	 * TODO: DOCUMENT ME!
	 */
	public void applyPreferences() {
		Collection resourcePaths = CollectionFactory.createLinkedList();
		ListModel listModel = this.lstPaths.getModel();

		for(int j = 0; j < listModel.getSize(); j++) {
			URLWrapper wrapper = (URLWrapper) listModel.getElementAt(j);

			if((wrapper != null) && (wrapper.url != null)) {
				resourcePaths.add(wrapper.url);
			}
		}

		ResourcePathClassLoader.setStaticPaths(resourcePaths);
		ResourcePathClassLoader.storePaths(resourcePaths, this.settings);
	}

	/**
	 * TODO: DOCUMENT ME!
	 *
	 * @return TODO: DOCUMENT ME!
	 */
	public Component getComponent() {
		return this;
	}

	/**
	 * TODO: DOCUMENT ME!
	 *
	 * @return TODO: DOCUMENT ME!
	 */
	public String getTitle() {
		return getString("title");
	}

	private DefaultListModel getWrappedURLs(Collection urls) {
		DefaultListModel wrappers = new DefaultListModel();

		for(Iterator iter = urls.iterator(); iter.hasNext();) {
			wrappers.add(wrappers.getSize(), new URLWrapper((URL) iter.next()));
		}

		return wrappers;
	}

	private class URLWrapper {
		/** TODO: DOCUMENT ME! */
		public URL url;

		/**
		 * Creates a new URLWrapper object.
		 *
		 * @param url TODO: DOCUMENT ME!
		 */
		public URLWrapper(URL url) {
			this.url = url;
		}

		/**
		 * TODO: DOCUMENT ME!
		 *
		 * @return TODO: DOCUMENT ME!
		 */
		public String toString() {
			if(url.getProtocol().equals("file")) {
				File f = new File(url.getPath());

				if(f.exists()) {
					return f.toString();
				} else {
					return url.toString();
				}
			} else {
				return url.toString();
			}
		}
	}

	// pavkovic 2003.01.28: this is a Map of the default Translations mapped to this class
	// it is called by reflection (we could force the implementation of an interface,
	// this way it is more flexible.)
	// Pls use this mechanism, so the translation files can be created automagically
	// by inspecting all classes.
	private static Map defaultTranslations;

	/**
	 * TODO: DOCUMENT ME!
	 *
	 * @return TODO: DOCUMENT ME!
	 */
	public static synchronized Map getDefaultTranslations() {
		if(defaultTranslations == null) {
			defaultTranslations = CollectionFactory.createHashtable();
			defaultTranslations.put("btn.new.caption", "Add...");
			defaultTranslations.put("btn.remove.caption", "Remove");
			defaultTranslations.put("btn.edit.caption", "Edit");
			defaultTranslations.put("chk.usefallback.caption",
									"Use the internet as fall-back option");

			defaultTranslations.put("msg.edit.text", "Edit resource path:");
			defaultTranslations.put("msg.edit.title", "Edit");
			defaultTranslations.put("msg.invalidformat.text",
									"The specified URL is not in a valid format. No resource path could be created from it.");
			defaultTranslations.put("msg.usenonexisting.text",
									"The specified file or directory could not be found. Do you want to use it as a resource path anyway?");
			defaultTranslations.put("msg.usenonexisting.title", "Confirm resource path");
			defaultTranslations.put("msg.nonexistingfile.text", "File or directory does not exist!");
			defaultTranslations.put("msg.urlexception.text", "Unable to convert to a valid URL:");

			defaultTranslations.put("title", "Resources");

			/*
			  defaultTranslations.put("msg.confirmnetconnect.text" ,
			  "Unable to find resource \"{0}\". Do you want Magellan to look for the resource on the internet?");
			  defaultTranslations.put("msg.confirmnetconnect.title" , "Internet connection");
			*/
		}

		return defaultTranslations;
	}
}




See more files for this project here

Magellan-Client

The Magellan Client is basicly a GUI for the pbem game eressea but can be used for other pbems based on \"atlantis\" too.

Project homepage: http://sourceforge.net/projects/magellan-client
Programming language(s): Java
License: other

  ResourcePathClassLoader.java
  ResourceSettings.java
  ResourceSettingsFactory.java