/* * Copyright 2003-2010 Tufts University Licensed under the * Educational Community 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.osedu.org/licenses/ECL-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 edu.tufts.vue.preferences.implementations; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Iterator; import java.util.prefs.Preferences; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import tufts.vue.VueResources; import edu.tufts.vue.preferences.VuePrefEvent; import edu.tufts.vue.preferences.VuePrefListener; import edu.tufts.vue.preferences.generics.BasePref; public class MetadataSchemaPreference extends BasePref implements ItemListener { private String category; private String name; private String description; private Object previousVraValue = null; private Object previousDublinCoreValue = null; private JCheckBox dublinCoreCheckbox = new JCheckBox(); private JCheckBox vraCheckbox = new JCheckBox(); private String dublinCoreName = "dublinCore"; private String vraName = "vra"; private boolean dublinCoreDefault = true; private boolean vraDefault = false; private boolean defaultValue = true; private static final MetadataSchemaPreference metadataSchemaPrefernece = new MetadataSchemaPreference(); public static MetadataSchemaPreference getInstance() { return metadataSchemaPrefernece; } private MetadataSchemaPreference() { this.category=edu.tufts.vue.preferences.PreferenceConstants.METADATA_CATEGORY; //this.key = "showNodeIcons"; this.name = VueResources.getString("preferences.metadataschema.title"); if (tufts.Util.isWindowsPlatform()) this.description = VueResources.getString("preferences.metadataschema.descriptionwin"); else this.description = VueResources.getString("preferences.metadataschema.description"); this.defaultValue = true; edu.tufts.vue.preferences.PreferencesManager.registerPreference(this); } public JComponent getPreferenceUI() { JPanel panel = new JPanel(); panel.setMinimumSize(new Dimension(420,400)); panel.setMaximumSize(new Dimension(420,400)); panel.setBackground(Color.WHITE); GridBagLayout gbl = new GridBagLayout(); panel.setLayout(gbl); JLabel titleLabel = new JLabel(getTitle()); Font f2 = titleLabel.getFont(); Font f = titleLabel.getFont().deriveFont(Font.BOLD); titleLabel.setFont(f); JTextArea descTextArea = new JTextArea(getDescription()); descTextArea.setFont(f2); descTextArea.setColumns(30); descTextArea.setLineWrap(true); descTextArea.setWrapStyleWord(true); descTextArea.setEditable(false); dublinCoreCheckbox.setBackground(Color.WHITE); vraCheckbox.setBackground(Color.WHITE); dublinCoreCheckbox.setText(VueResources.getString("jlabel.dublincore")); vraCheckbox.setText(VueResources.getString("jlabel.vra")); GridBagConstraints gbConstraints = new GridBagConstraints(); gbConstraints.gridx = 0; gbConstraints.gridy = 0; gbConstraints.gridwidth = 1; gbConstraints.fill = GridBagConstraints.HORIZONTAL; gbConstraints.anchor = GridBagConstraints.FIRST_LINE_START; gbConstraints.weightx = 1; gbConstraints.weighty = 0; gbConstraints.insets = new Insets(15, 10, 0, 10); panel.add(titleLabel, gbConstraints); gbConstraints.gridy = 1; panel.add(descTextArea, gbConstraints); gbConstraints.gridy = 2; gbConstraints.insets = new Insets(15, 30, 0, 10); panel.add(dublinCoreCheckbox,gbConstraints); gbConstraints.gridy = 3; gbConstraints.fill=GridBagConstraints.REMAINDER; gbConstraints.weighty = 1; gbConstraints.insets = new Insets(10, 30, 0, 10); panel.add(vraCheckbox,gbConstraints); dublinCoreCheckbox.addItemListener(this); vraCheckbox.addItemListener(this); dublinCoreCheckbox.setSelected(((Boolean)getValue(dublinCoreName)).booleanValue()); vraCheckbox.setSelected(((Boolean)getValue(vraName)).booleanValue()); return panel; } public boolean getDublinCoreValue() { return ((Boolean)getValue(dublinCoreName)).booleanValue(); } public boolean getVRAValue() { return ((Boolean)getValue(vraName)).booleanValue(); } public void itemStateChanged(ItemEvent e) { JCheckBox box = (JCheckBox)e.getSource(); //Preferences p = Preferences.userNodeForPackage(getPrefRoot()); //p.putBoolean(getPrefName(), box.isSelected()); if (box.equals(dublinCoreCheckbox)) { setValue(dublinCoreName,Boolean.valueOf(box.isSelected())); edu.tufts.vue.metadata.CategoryModel cats = tufts.vue.VUE.getCategoryModel(); if(box.isSelected()) { cats.loadDefaultVUEOntology(edu.tufts.vue.metadata.CategoryModel.DUBLIN_CORE); } else { cats.removeDefaultOntology(edu.tufts.vue.metadata.CategoryModel.DUBLIN_CORE); } } else if (box.equals(vraCheckbox)) { setValue(vraName,Boolean.valueOf(box.isSelected())); edu.tufts.vue.metadata.CategoryModel cats = tufts.vue.VUE.getCategoryModel(); if(box.isSelected()) { cats.loadDefaultVUEOntology(edu.tufts.vue.metadata.CategoryModel.VRA); } else { cats.removeDefaultOntology(edu.tufts.vue.metadata.CategoryModel.VRA); } } } public JCheckBox getCheckBox() { return dublinCoreCheckbox; } public void setValue(String prefName, Object b) { if (prefName.equals(dublinCoreName)) previousDublinCoreValue = Boolean.valueOf(dublinCoreCheckbox.isSelected()); else if (prefName.equals(vraName)) previousVraValue = Boolean.valueOf(vraCheckbox.isSelected()); Preferences p = Preferences.userNodeForPackage(getPrefRoot()); p.putBoolean(getPrefName(prefName), ((Boolean)b).booleanValue()); _fireVuePrefEvent(prefName); } public Object getValue(String prefName) { Preferences p = Preferences.userNodeForPackage(getPrefRoot()); Boolean b = Boolean.valueOf(p.getBoolean(getPrefName(prefName), ((Boolean)getDefaultValue(prefName)).booleanValue())); return b; } public Object getPreviousValue(String prefName) { if (prefName.equals(dublinCoreName)) return (previousDublinCoreValue == null) ? getDefaultValue(prefName) : previousDublinCoreValue; else if (prefName.equals(vraName)) return (previousVraValue == null) ? getDefaultValue(prefName) : previousVraValue; else return new Boolean(true); } public Object getDefaultValue(String prefName) { if (prefName.equals(dublinCoreName)) return dublinCoreDefault; else if (prefName.equals(vraName)) return vraDefault; else return new Boolean(true); } protected synchronized void _fireVuePrefEvent(String prefName) { VuePrefEvent event = new VuePrefEvent(this,getPreviousValue(prefName),getValue()); Iterator listeners = _listeners.iterator(); while(listeners.hasNext()) { ((VuePrefListener)listeners.next()).preferenceChanged(event); } } public String getDescription() { return description; } public String getMessage() { return name; } public String getTitle() { return name; } public String getCategoryKey() { return category; } public String getPrefName(String key) { return category + "." + key; } public Object getDefaultValue() { // TODO Auto-generated method stub return new Boolean("true"); } public String getPrefName() { // TODO Auto-generated method stub return ""; } public Object getValue() { // TODO Auto-generated method stub return new Boolean("true"); } public void setValue(Object i) { // TODO Auto-generated method stub } public Object getPreviousValue() { // TODO Auto-generated method stub return null; } }