From: <cpm...@us...> - 2009-09-02 08:11:06
|
Revision: 10384 http://pcgen.svn.sourceforge.net/pcgen/?rev=10384&view=rev Author: cpmeister Date: 2009-09-02 08:10:52 +0000 (Wed, 02 Sep 2009) Log Message: ----------- Plugin system update Modified Paths: -------------- sandbox/cdomui/code/src/java/pcgen/core/bonus/Bonus.java sandbox/cdomui/code/src/java/pcgen/core/prereq/PrerequisiteTestFactory.java sandbox/cdomui/code/src/java/pcgen/gui2/tabs/AbilityChooserTab.java sandbox/cdomui/code/src/java/pcgen/persistence/lst/TokenStore.java sandbox/cdomui/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java sandbox/cdomui/code/src/java/pcgen/rules/persistence/TokenLibrary.java sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java sandbox/cdomui/code/src/java/pcgen/system/PluginLoader.java Added Paths: ----------- sandbox/cdomui/code/src/java/pcgen/gui2/SplashScreen.java sandbox/cdomui/code/src/java/pcgen/system/Main.java Modified: sandbox/cdomui/code/src/java/pcgen/core/bonus/Bonus.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/bonus/Bonus.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/core/bonus/Bonus.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -36,13 +36,14 @@ import java.util.HashMap; import java.util.List; import java.util.StringTokenizer; +import pcgen.system.PluginLoader; /** * <code>Bonus</code> * * @author Greg Bingleman <by...@ho...> */ -public class Bonus +public class Bonus implements PluginLoader { static final int BONUS_UNDEFINED = -1; @@ -50,10 +51,30 @@ private static final HashMap<String, BonusMapEntry> BONUS_TAG_MAP = new HashMap<String, BonusMapEntry>(); + private static Bonus instance = null; + private Bonus() { // Constructor } + public static Bonus getInstance() + { + if (instance == null) + { + instance = new Bonus(); + } + return instance; + } + public void loadPlugin(Class<?> clazz) throws Exception + { + addBonusClass(clazz, clazz.getName()); + } + + public Class[] getPluginClasses() + { + return new Class[]{BonusObj.class}; + } + /** * Get the bonus type given a name * @param bonusName Modified: sandbox/cdomui/code/src/java/pcgen/core/prereq/PrerequisiteTestFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/core/prereq/PrerequisiteTestFactory.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/core/prereq/PrerequisiteTestFactory.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.Map; +import pcgen.system.PluginLoader; import pcgen.util.Logging; import pcgen.util.PropertyFactory; @@ -33,7 +34,7 @@ * @author wardc * */ -public class PrerequisiteTestFactory { +public class PrerequisiteTestFactory implements PluginLoader{ private static PrerequisiteTestFactory instance = null; private static Map<String, PrerequisiteTest> testLookup = new HashMap<String, PrerequisiteTest>(); @@ -89,4 +90,14 @@ } return test; } + + public void loadPlugin(Class<?> clazz) throws Exception + { + register((PrerequisiteTest) clazz.newInstance()); + } + + public Class[] getPluginClasses() + { + return new Class[]{PrerequisiteTest.class}; + } } Added: sandbox/cdomui/code/src/java/pcgen/gui2/SplashScreen.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/SplashScreen.java (rev 0) +++ sandbox/cdomui/code/src/java/pcgen/gui2/SplashScreen.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -0,0 +1,123 @@ +/* + * SplashScreen.java + * Copyright 2009 Connor Petty <cpm...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on Sep 1, 2009, 10:49:27 PM + */ +package pcgen.gui2; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.io.File; +import java.net.URL; +import java.util.Observable; +import java.util.Observer; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JWindow; +import pcgen.gui2.tools.ResourceManager; + +/** + * + * @author Connor Petty <cpm...@us...> + */ +public class SplashScreen extends JWindow implements Observer +{ + + private final JProgressBar loadProgress; + private final JLabel loadingLabel; + + public SplashScreen() + { + this.loadProgress = new JProgressBar(); + this.loadingLabel = new JLabel(); + initComponents(); + } + + private void initComponents() + { + Container pane = getContentPane(); + pane.setLayout(new BorderLayout()); + + JLabel splashLabel = new JLabel(ResourceManager.getImageIcon("SplashPcgen_Alpha.png")); + pane.add(splashLabel, BorderLayout.NORTH); + loadingLabel.setText(" "); + pane.add(loadingLabel, BorderLayout.CENTER); + + loadProgress.setStringPainted(false); + pane.add(loadProgress, BorderLayout.SOUTH); + + pack(); + } + + public void update(Observable o, Object arg) + { + if (arg instanceof Integer) + { + loadProgress.setMinimum(0); + loadProgress.setMaximum((Integer) arg); + setVisible(true); + } + else if (arg instanceof URL) + { + URL url = (URL) arg; + File file = new File(url.getFile()); + loadingLabel.setText(file.getName()); + loadProgress.setValue(loadProgress.getValue() + 1); + } + else if (arg instanceof String) + { + String str = (String) arg; + if (str.equalsIgnoreCase("done")) + { + dispose(); + } + } + } + + private static class SplashPanel extends JPanel + { + + private final ImageIcon splashImage; + + public SplashPanel() + { + splashImage = ResourceManager.getImageIcon("SplashPcgen_Alpha.png"); + if (splashImage != null) + { + setPreferredSize(new Dimension(splashImage.getIconWidth(), + splashImage.getIconHeight())); + } + } + + @Override + public void paintComponent(Graphics g) + { + if (splashImage != null) + { + splashImage.paintIcon(this, g, 0, 0); + } + } + + } +} Modified: sandbox/cdomui/code/src/java/pcgen/gui2/tabs/AbilityChooserTab.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/gui2/tabs/AbilityChooserTab.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/gui2/tabs/AbilityChooserTab.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -67,599 +67,606 @@ public class AbilityChooserTab extends ChooserPane implements StateEditable { - private static final DataView<AbilityFacade> abilityDataView = new DataView<AbilityFacade>() - { + private static final DataView<AbilityFacade> abilityDataView = new DataView<AbilityFacade>() + { - private final List<? extends DataViewColumn> dataColumns = - Arrays.asList(new DefaultDataViewColumn("Type", - String.class), - new DefaultDataViewColumn("Mult", - Boolean.class), - new DefaultDataViewColumn("Stack", - Boolean.class), - new DefaultDataViewColumn("Description", - String.class), - new DefaultDataViewColumn("Source", - String.class)); + private final List<? extends DataViewColumn> dataColumns = + Arrays.asList(new DefaultDataViewColumn("Type", + String.class), + new DefaultDataViewColumn("Mult", + Boolean.class), + new DefaultDataViewColumn("Stack", + Boolean.class), + new DefaultDataViewColumn("Description", + String.class), + new DefaultDataViewColumn("Source", + String.class)); - public List<? extends DataViewColumn> getDataColumns() - { - return dataColumns; - } + public List<? extends DataViewColumn> getDataColumns() + { + return dataColumns; + } - public List<?> getData(AbilityFacade obj) - { - return Arrays.asList(getTypes(obj.getTypes()), - obj.isMult(), - obj.isStackable(), - obj.getDescription(), - obj.getSource()); - } + public List<?> getData(AbilityFacade obj) + { + return Arrays.asList(getTypes(obj.getTypes()), + obj.isMult(), + obj.isStackable(), + obj.getDescription(), + obj.getSource()); + } - private String getTypes(List<String> types) - { - String ret = types.get(0); - for (int x = 1; x < types.size(); x++) - { - ret += ", " + types.get(x); - } - return ret; - } + private String getTypes(List<String> types) + { + String ret = types.get(0); + for (int x = 1; x < types.size(); x++) + { + ret += ", " + types.get(x); + } + return ret; + } - }; - private final FilteredTreeViewPanel availableTreeViewPanel; - private final FilteredTreeViewPanel selectedTreeViewPanel; - private final JTable categoryTable; - private AvailableAbilityTreeViewModel availableModel; - private SelectedAbilityTreeViewModel selectedModel; - private CatagoryTableModel categoryModel; - private AbilityCategoryFacade selectedCatagory; - private AbilityFacade selectedAbility; + }; + private final FilteredTreeViewPanel availableTreeViewPanel; + private final FilteredTreeViewPanel selectedTreeViewPanel; + private final JTable categoryTable; + private AvailableAbilityTreeViewModel availableModel; + private SelectedAbilityTreeViewModel selectedModel; + private CatagoryTableModel categoryModel; + private AbilityCategoryFacade selectedCatagory; + private AbilityFacade selectedAbility; - public AbilityChooserTab() - { - this.availableTreeViewPanel = new FilteredTreeViewPanel(); - this.selectedTreeViewPanel = new FilteredTreeViewPanel(); - this.categoryTable = new JTable(); - initComponents(); - } + public AbilityChooserTab() + { + this.availableTreeViewPanel = new FilteredTreeViewPanel(); + this.selectedTreeViewPanel = new FilteredTreeViewPanel(); + this.categoryTable = new JTable(); + initComponents(); + } - private void initComponents() - { - ListSelectionModel selectionModel; - selectionModel = selectedTreeViewPanel.getSelectionModel(); - selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - selectionModel.addListSelectionListener( - new ListSelectionListener() - { + private void initComponents() + { + ListSelectionModel selectionModel; + selectionModel = selectedTreeViewPanel.getSelectionModel(); + selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + selectionModel.addListSelectionListener( + new ListSelectionListener() + { - public void valueChanged(ListSelectionEvent e) - { - if (!e.getValueIsAdjusting()) - { - List<Object> data = selectedTreeViewPanel.getSelectedData(); - AbilityFacade ability = null; - if (!data.isEmpty()) - { - Object obj = data.get(0); - AbilityCategoryFacade category = selectedCatagory; - if (obj instanceof AbilityFacade) - { - ability = (AbilityFacade) obj; - category = selectedModel.getCatagoryForAbility(ability); - } - else if (obj instanceof AbilityCategoryFacade) - { - category = (AbilityCategoryFacade) obj; - } - setSelectedCatagory(category); - } - setSelectedAbility(ability); - } - } + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) + { + List<Object> data = selectedTreeViewPanel.getSelectedData(); + AbilityFacade ability = null; + if (!data.isEmpty()) + { + Object obj = data.get(0); + AbilityCategoryFacade category = selectedCatagory; + if (obj instanceof AbilityFacade) + { + ability = (AbilityFacade) obj; + category = selectedModel.getCatagoryForAbility(ability); + } + else if (obj instanceof AbilityCategoryFacade) + { + category = (AbilityCategoryFacade) obj; + } + setSelectedCatagory(category); + } + setSelectedAbility(ability); + } + } - }); + }); - selectionModel = availableTreeViewPanel.getSelectionModel(); - selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - selectionModel.addListSelectionListener( - new ListSelectionListener() - { + selectionModel = availableTreeViewPanel.getSelectionModel(); + selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + selectionModel.addListSelectionListener( + new ListSelectionListener() + { - public void valueChanged(ListSelectionEvent e) - { - if (!e.getValueIsAdjusting()) - { - List<Object> data = availableTreeViewPanel.getSelectedData(); - if (!data.isEmpty() && - data.get(0) instanceof AbilityFacade) - { - setSelectedAbility((AbilityFacade) data.get(0)); - } - else - { - setSelectedAbility(null); - } - } - } + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) + { + List<Object> data = availableTreeViewPanel.getSelectedData(); + if (!data.isEmpty() && + data.get(0) instanceof AbilityFacade) + { + setSelectedAbility((AbilityFacade) data.get(0)); + } + else + { + setSelectedAbility(null); + } + } + } - }); + }); - FlippingSplitPane pane = new FlippingSplitPane(JSplitPane.VERTICAL_SPLIT, - true, - selectedTreeViewPanel, - availableTreeViewPanel); - pane.setOneTouchExpandable(true); - pane.setDividerSize(7); - setPrimaryChooserComponent(pane); + FlippingSplitPane pane = new FlippingSplitPane(JSplitPane.VERTICAL_SPLIT, + true, + selectedTreeViewPanel, + availableTreeViewPanel); + pane.setOneTouchExpandable(true); + pane.setDividerSize(7); + setPrimaryChooserComponent(pane); - selectionModel = categoryTable.getSelectionModel(); - selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - selectionModel.addListSelectionListener( - new ListSelectionListener() - { + selectionModel = categoryTable.getSelectionModel(); + selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + selectionModel.addListSelectionListener( + new ListSelectionListener() + { - public void valueChanged(ListSelectionEvent e) - { - if (!e.getValueIsAdjusting()) - { - setSelectedCatagory(categoryModel.getCatagory(e.getFirstIndex())); - } - } + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) + { + setSelectedCatagory(categoryModel.getCatagory(e.getFirstIndex())); + } + } - }); + }); - setSecondaryChooserComponent(new JScrollPane(categoryTable, - JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER)); - } + setSecondaryChooserComponent(new JScrollPane(categoryTable, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_NEVER)); + } - private void setSelectedAbility(AbilityFacade ability) - { - this.selectedAbility = ability; - setInfoPaneText(ability.getInfo()); - } + private void setSelectedAbility(AbilityFacade ability) + { + this.selectedAbility = ability; + setInfoPaneText(ability.getInfo()); + } - private void setSelectedCatagory(AbilityCategoryFacade category) - { - this.selectedCatagory = category; + private void setSelectedCatagory(AbilityCategoryFacade category) + { + this.selectedCatagory = category; - availableModel.setAbilityCatagory(category); - setInfoPaneTitle(category.getName() + " Info"); - } + availableModel.setAbilityCatagory(category); + setInfoPaneTitle(category.getName() + " Info"); + } - private static final class SelectedAbilityTreeViewModel extends AbstractGenericListDataWrapper<AbilityCategoryFacade> - implements FilterableTreeViewModel<AbilityFacade> - { + private static final class SelectedAbilityTreeViewModel extends AbstractGenericListDataWrapper<AbilityCategoryFacade> + implements FilterableTreeViewModel<AbilityFacade> + { - private final List<? extends TreeView<AbilityFacade>> treeViews = null; - private final Map<AbilityFacade, AbilityCategoryFacade> categoryMap; - private final Map<GenericListModel<AbilityFacade>, GenericListDataListener> listenerMap; - private final DefaultGenericListModel<AbilityFacade> model; - private final CharacterFacade character; + private final List<? extends TreeView<AbilityFacade>> treeViews = null; + private final Map<AbilityFacade, AbilityCategoryFacade> categoryMap; + private final Map<GenericListModel<AbilityFacade>, GenericListDataListener> listenerMap; + private final DefaultGenericListModel<AbilityFacade> model; + private final CharacterFacade character; - public SelectedAbilityTreeViewModel(CharacterFacade character, - DefaultGenericListModel<AbilityCategoryFacade> catagories) - { - super(catagories); - this.categoryMap = new HashMap<AbilityFacade, AbilityCategoryFacade>(); - this.listenerMap = new HashMap<GenericListModel<AbilityFacade>, GenericListDataListener>(); - this.model = new DefaultGenericListModel<AbilityFacade>(); - this.character = character; - setModel(catagories); - } + public SelectedAbilityTreeViewModel(CharacterFacade character, + DefaultGenericListModel<AbilityCategoryFacade> catagories) + { + super(catagories); + this.categoryMap = new HashMap<AbilityFacade, AbilityCategoryFacade>(); + this.listenerMap = new HashMap<GenericListModel<AbilityFacade>, GenericListDataListener>(); + this.model = new DefaultGenericListModel<AbilityFacade>(); + this.character = character; + setModel(catagories); + } - protected void addData(Collection<? extends AbilityCategoryFacade> catagories) - { - AbilityCategoryFacade[] categoryArray = catagories.toArray(new AbilityCategoryFacade[0]); - for (final AbilityCategoryFacade category : categoryArray) - { - GenericListModel<AbilityFacade> abilityList = character.getAbilities(category); - GenericListDataListener<AbilityFacade> listener = new AbilityModelListener(abilityList) - { + protected void addData(Collection<? extends AbilityCategoryFacade> catagories) + { + AbilityCategoryFacade[] categoryArray = catagories.toArray(new AbilityCategoryFacade[0]); + for (final AbilityCategoryFacade category : categoryArray) + { + GenericListModel<AbilityFacade> abilityList = character.getAbilities(category); + GenericListDataListener<AbilityFacade> listener = new AbilityModelListener( + abilityList) + { - @Override - protected void addData(Collection<? extends AbilityFacade> data) - { - for (AbilityFacade ability : data) - { - categoryMap.put(ability, category); - } - model.addAll(data); - } + @Override + protected void addData(Collection<? extends AbilityFacade> data) + { + for (AbilityFacade ability : data) + { + categoryMap.put(ability, category); + } + model.addAll(data); + } - }; - listenerMap.put(abilityList, listener); - } - } + }; + listenerMap.put(abilityList, listener); + } + } - protected void removeData(Collection<? extends AbilityCategoryFacade> catagories) - { - for (AbilityCategoryFacade category : catagories) - { - GenericListModel<AbilityFacade> abilityList = character.getAbilities(category); - abilityList.removeGenericListDataListener(listenerMap.get(abilityList)); - listenerMap.remove(abilityList); + protected void removeData(Collection<? extends AbilityCategoryFacade> catagories) + { + for (AbilityCategoryFacade category : catagories) + { + GenericListModel<AbilityFacade> abilityList = character.getAbilities(category); + abilityList.removeGenericListDataListener(listenerMap.get(abilityList)); + listenerMap.remove(abilityList); - final List<AbilityFacade> listWrapper = new GenericListModelWrapper<AbilityFacade>(abilityList); - model.removeAll(listWrapper); - categoryMap.keySet().removeAll(listWrapper); - } - } + final List<AbilityFacade> listWrapper = new GenericListModelWrapper<AbilityFacade>( + abilityList); + model.removeAll(listWrapper); + categoryMap.keySet().removeAll(listWrapper); + } + } - public AbilityCategoryFacade getCatagoryForAbility(AbilityFacade ability) - { - return categoryMap.get(ability); - } + public AbilityCategoryFacade getCatagoryForAbility(AbilityFacade ability) + { + return categoryMap.get(ability); + } - public List<? extends TreeView<AbilityFacade>> getTreeViews() - { - return treeViews; - } + public List<? extends TreeView<AbilityFacade>> getTreeViews() + { + return treeViews; + } - public int getDefaultTreeViewIndex() - { - return 0; - } + public int getDefaultTreeViewIndex() + { + return 0; + } - public DataView<AbilityFacade> getDataView() - { - return abilityDataView; - } + public DataView<AbilityFacade> getDataView() + { + return abilityDataView; + } - public DefaultGenericListModel<AbilityFacade> getDataModel() - { - return model; - } + public DefaultGenericListModel<AbilityFacade> getDataModel() + { + return model; + } - private abstract class AbilityModelListener extends AbstractGenericListDataWrapper<AbilityFacade> - { + private abstract class AbilityModelListener extends AbstractGenericListDataWrapper<AbilityFacade> + { - public AbilityModelListener(GenericListModel<AbilityFacade> model) - { - super(model); - } + public AbilityModelListener(GenericListModel<AbilityFacade> model) + { + super(model); + } - @Override - protected void removeData(Collection<? extends AbilityFacade> data) - { - model.removeAll(data); - categoryMap.keySet().removeAll(data); - } + @Override + protected void removeData(Collection<? extends AbilityFacade> data) + { + model.removeAll(data); + categoryMap.keySet().removeAll(data); + } - } + } - public Class<AbilityFacade> getFilterClass() - { - return AbilityFacade.class; - } + public Class<AbilityFacade> getFilterClass() + { + return AbilityFacade.class; + } - } + } - private static final class AvailableAbilityTreeViewModel extends AbstractGenericListDataWrapper<AbilityFacade> - implements FilterableTreeViewModel<AbilityFacade> - { + private static final class AvailableAbilityTreeViewModel extends AbstractGenericListDataWrapper<AbilityFacade> + implements FilterableTreeViewModel<AbilityFacade> + { - private final DefaultGenericListModel<AbilityFacade> dataModel; - private final CharacterFacade character; - private AbilityCategoryFacade category; + private final DefaultGenericListModel<AbilityFacade> dataModel; + private final CharacterFacade character; + private AbilityCategoryFacade category; - public AvailableAbilityTreeViewModel(CharacterFacade character) - { - this.dataModel = new DefaultGenericListModel<AbilityFacade>(); - this.character = character; - } + public AvailableAbilityTreeViewModel(CharacterFacade character) + { + this.dataModel = new DefaultGenericListModel<AbilityFacade>(); + this.character = character; + } - public List<? extends TreeView<AbilityFacade>> getTreeViews() - { - return null; - } + public List<? extends TreeView<AbilityFacade>> getTreeViews() + { + return null; + } - public int getDefaultTreeViewIndex() - { - return 0; - } + public int getDefaultTreeViewIndex() + { + return 0; + } - public DataView<AbilityFacade> getDataView() - { - return abilityDataView; - } + public DataView<AbilityFacade> getDataView() + { + return abilityDataView; + } - public DefaultGenericListModel<AbilityFacade> getDataModel() - { - return dataModel; - } + public DefaultGenericListModel<AbilityFacade> getDataModel() + { + return dataModel; + } - public void setAbilityCatagory(AbilityCategoryFacade category) - { - this.category = category; - GenericListModel<AbilityFacade> abilities = character.getDataSet().getAbilities(category); - dataModel.clear(); - setModel(abilities); - } + public void setAbilityCatagory(AbilityCategoryFacade category) + { + this.category = category; + GenericListModel<AbilityFacade> abilities = character.getDataSet().getAbilities(category); + dataModel.clear(); + setModel(abilities); + } - protected void addData(Collection<? extends AbilityFacade> abilities) - { - HashSet<AbilityFacade> abilitySet = new HashSet<AbilityFacade>(abilities); - Iterator<AbilityFacade> it = abilitySet.iterator(); - while (it.hasNext()) - { - AbilityFacade ability = it.next(); - if (!ability.isMult() && character.hasAbility(category, ability)) - { - it.remove(); - } - } - dataModel.addAll(abilitySet); - } + protected void addData(Collection<? extends AbilityFacade> abilities) + { + HashSet<AbilityFacade> abilitySet = new HashSet<AbilityFacade>(abilities); + Iterator<AbilityFacade> it = abilitySet.iterator(); + while (it.hasNext()) + { + AbilityFacade ability = it.next(); + if (!ability.isMult() && character.hasAbility(category, ability)) + { + it.remove(); + } + } + dataModel.addAll(abilitySet); + } - @Override - protected void removeData(Collection<? extends AbilityFacade> data) - { - dataModel.removeAll(data); - } + @Override + protected void removeData(Collection<? extends AbilityFacade> data) + { + dataModel.removeAll(data); + } - public Class<AbilityFacade> getFilterClass() - { - return AbilityFacade.class; - } + public Class<AbilityFacade> getFilterClass() + { + return AbilityFacade.class; + } - } + } - private static final class CatagoryTableModel extends AbstractTableModel - implements ListDataListener - { + private static final class CatagoryTableModel extends AbstractTableModel + implements ListDataListener + { - private CharacterFacade character; - private DefaultGenericListModel<AbilityCategoryFacade> catagories; + private CharacterFacade character; + private DefaultGenericListModel<AbilityCategoryFacade> catagories; - public CatagoryTableModel(CharacterFacade character, - DefaultGenericListModel<AbilityCategoryFacade> catagories) - { - this.character = character; - this.catagories = catagories; - catagories.addListDataListener(this); - } + public CatagoryTableModel(CharacterFacade character, + DefaultGenericListModel<AbilityCategoryFacade> catagories) + { + this.character = character; + this.catagories = catagories; + catagories.addListDataListener(this); + } - public AbilityCategoryFacade getCatagory(int index) - { - return catagories.getElementAt(index); - } + public AbilityCategoryFacade getCatagory(int index) + { + return catagories.getElementAt(index); + } - public int getRowCount() - { - return catagories.getSize(); - } + public int getRowCount() + { + return catagories.getSize(); + } - public int getColumnCount() - { - return 2; - } + public int getColumnCount() + { + return 2; + } - @Override - public boolean isCellEditable(int rowIndex, int columnIndex) - { - if (columnIndex == 1) - { - return true; - } - return false; - } + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) + { + if (columnIndex == 1) + { + return true; + } + return false; + } - public Object getValueAt(int rowIndex, int columnIndex) - { - AbilityCategoryFacade category = catagories.getElementAt(rowIndex); - switch (columnIndex) - { - case 0: - return category; - case 1: - return character.getRemainingSelections(category); - default: - throw new IndexOutOfBoundsException(); - } - } + public Object getValueAt(int rowIndex, int columnIndex) + { + AbilityCategoryFacade category = catagories.getElementAt(rowIndex); + switch (columnIndex) + { + case 0: + return category; + case 1: + return character.getRemainingSelections(category); + default: + throw new IndexOutOfBoundsException(); + } + } - @Override - public void setValueAt(Object aValue, int rowIndex, int columnIndex) - { - character.setRemainingSelection(catagories.getElementAt(rowIndex), - (Integer) aValue); - } + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) + { + character.setRemainingSelection(catagories.getElementAt(rowIndex), + (Integer) aValue); + } - @Override - public String getColumnName(int column) - { - if (column == 0) - { - return "Catagory"; - } - return "Remaining"; - } + @Override + public String getColumnName(int column) + { + if (column == 0) + { + return "Catagory"; + } + return "Remaining"; + } - @Override - public Class<?> getColumnClass(int columnIndex) - { - if (columnIndex == 1) - { - return Integer.class; - } - return Object.class; - } + @Override + public Class<?> getColumnClass(int columnIndex) + { + if (columnIndex == 1) + { + return Integer.class; + } + return Object.class; + } - public void intervalAdded(ListDataEvent e) - { - fireTableRowsInserted(e.getIndex0(), e.getIndex1()); - } + public void intervalAdded(ListDataEvent e) + { + fireTableRowsInserted(e.getIndex0(), e.getIndex1()); + } - public void intervalRemoved(ListDataEvent e) - { - fireTableRowsDeleted(e.getIndex0(), e.getIndex1()); - } + public void intervalRemoved(ListDataEvent e) + { + fireTableRowsDeleted(e.getIndex0(), e.getIndex1()); + } - public void contentsChanged(ListDataEvent e) - { - fireTableRowsUpdated(e.getIndex0(), e.getIndex1()); - } + public void contentsChanged(ListDataEvent e) + { + fireTableRowsUpdated(e.getIndex0(), e.getIndex1()); + } - } + } - private final class AbilityTransferHandler extends TransferHandler - { + private final class AbilityTransferHandler extends TransferHandler + { - private CharacterFacade character; + private CharacterFacade character; - public AbilityTransferHandler(CharacterFacade character) - { - this.character = character; - } + public AbilityTransferHandler(CharacterFacade character) + { + this.character = character; + } - private final DataFlavor abilityFlavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + - ";class=" + - AbilityFacade.class.getName(), - null); + private final DataFlavor abilityFlavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + + ";class=" + + AbilityFacade.class.getName(), + null); - @Override - public int getSourceActions(JComponent c) - { - if (selectedAbility != null) - { - if (selectedTreeViewPanel.isAncestorOf(c)) - { - return MOVE; - } - if (selectedAbility.isMult()) - { - return COPY; - } - if (!character.hasAbility(selectedCatagory, selectedAbility)) - { - return MOVE; - } - } - return NONE; - } + @Override + public int getSourceActions(JComponent c) + { + if (selectedAbility != null) + { + if (selectedTreeViewPanel.isAncestorOf(c)) + { + return MOVE; + } + if (selectedAbility.isMult()) + { + return COPY; + } + if (!character.hasAbility(selectedCatagory, selectedAbility)) + { + return MOVE; + } + } + return NONE; + } - @Override - protected Transferable createTransferable(JComponent c) - { - final AbilityFacade transferAbility = selectedAbility; - return new Transferable() - { + @Override + protected Transferable createTransferable(JComponent c) + { + final AbilityFacade transferAbility = selectedAbility; + return new Transferable() + { - public DataFlavor[] getTransferDataFlavors() - { - return new DataFlavor[]{abilityFlavor}; - } + public DataFlavor[] getTransferDataFlavors() + { + return new DataFlavor[] + { + abilityFlavor + }; + } - public boolean isDataFlavorSupported(DataFlavor flavor) - { - return abilityFlavor == flavor; - } + public boolean isDataFlavorSupported(DataFlavor flavor) + { + return abilityFlavor == flavor; + } - public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException - { - if (!isDataFlavorSupported(flavor)) - { - throw new UnsupportedFlavorException(flavor); - } - return transferAbility; - } + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException + { + if (!isDataFlavorSupported(flavor)) + { + throw new UnsupportedFlavorException(flavor); + } + return transferAbility; + } - }; - } + }; + } - @Override - public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) - { - return transferFlavors[0] == abilityFlavor; - } + @Override + public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) + { + return transferFlavors[0] == abilityFlavor; + } - @Override - public boolean importData(JComponent comp, Transferable t) - { - if (selectedTreeViewPanel.isAncestorOf(comp)) - { - try - { - AbilityFacade ability = (AbilityFacade) t.getTransferData(abilityFlavor); - // TODO: add some extra logic - character.addAbility(selectedCatagory, ability); - return true; - } - catch (UnsupportedFlavorException ex) - { - Logger.getLogger(AbilityChooserTab.class.getName()).log(Level.SEVERE, - null, - ex); - } - catch (IOException ex) - { - Logger.getLogger(AbilityChooserTab.class.getName()).log(Level.SEVERE, - null, - ex); - } - return false; - } - return true; - } + @Override + public boolean importData(JComponent comp, Transferable t) + { + if (selectedTreeViewPanel.isAncestorOf(comp)) + { + try + { + AbilityFacade ability = (AbilityFacade) t.getTransferData(abilityFlavor); + // TODO: add some extra logic + character.addAbility(selectedCatagory, ability); + return true; + } + catch (UnsupportedFlavorException ex) + { + Logger.getLogger(AbilityChooserTab.class.getName()).log(Level.SEVERE, + null, + ex); + } + catch (IOException ex) + { + Logger.getLogger(AbilityChooserTab.class.getName()).log(Level.SEVERE, + null, + ex); + } + return false; + } + return true; + } - @Override - protected void exportDone(JComponent source, Transferable data, - int action) - { - if (action == COPY) - { - return; - } - } + @Override + protected void exportDone(JComponent source, Transferable data, + int action) + { + if (action == COPY) + { + return; + } + } - } - private static final String SELECTED_TREEVIEW_PANEL_STATE = "SelectedTreeViewPanelState"; - private static final String AVAILABLE_TREEVIEW_PANEL_STATE = "AvailableTreeViewPanelState"; + } + private static final String SELECTED_TREEVIEW_PANEL_STATE = "SelectedTreeViewPanelState"; + private static final String AVAILABLE_TREEVIEW_PANEL_STATE = "AvailableTreeViewPanelState"; - public Hashtable<Object, Object> createState(CharacterFacade character, - DefaultGenericListModel<AbilityCategoryFacade> catagories) - { - Hashtable<Object, Object> state = new Hashtable<Object, Object>(); - state.put(CatagoryTableModel.class, - new CatagoryTableModel(character, catagories)); - SelectedAbilityTreeViewModel selectedAbilityModel = new SelectedAbilityTreeViewModel(character, - catagories); - AvailableAbilityTreeViewModel availableAbilityModel = new AvailableAbilityTreeViewModel(character); + public Hashtable<Object, Object> createState(CharacterFacade character, + DefaultGenericListModel<AbilityCategoryFacade> catagories) + { + Hashtable<Object, Object> state = new Hashtable<Object, Object>(); + state.put(CatagoryTableModel.class, + new CatagoryTableModel(character, catagories)); + SelectedAbilityTreeViewModel selectedAbilityModel = new SelectedAbilityTreeViewModel( + character, catagories); + AvailableAbilityTreeViewModel availableAbilityModel = new AvailableAbilityTreeViewModel( + character); - state.put(SelectedAbilityTreeViewModel.class, selectedAbilityModel); - state.put(AvailableAbilityTreeViewModel.class, availableAbilityModel); - state.put(SELECTED_TREEVIEW_PANEL_STATE, - selectedTreeViewPanel.createState(character, - selectedAbilityModel)); - state.put(AVAILABLE_TREEVIEW_PANEL_STATE, - availableTreeViewPanel.createState(character, - availableAbilityModel)); - state.put(AbilityTransferHandler.class, - new AbilityTransferHandler(character)); - return state; - } + state.put(SelectedAbilityTreeViewModel.class, selectedAbilityModel); + state.put(AvailableAbilityTreeViewModel.class, availableAbilityModel); + state.put(SELECTED_TREEVIEW_PANEL_STATE, + selectedTreeViewPanel.createState(character, selectedAbilityModel)); + state.put(AVAILABLE_TREEVIEW_PANEL_STATE, + availableTreeViewPanel.createState(character, availableAbilityModel)); + state.put(AbilityTransferHandler.class, new AbilityTransferHandler(character)); + return state; + } - public void storeState(Hashtable<Object, Object> state) - { - //state.put("SelectedCatagory", categoryTreeTable.getSelectedRow()); - } + public void storeState(Hashtable<Object, Object> state) + { + //state.put("SelectedCatagory", categoryTreeTable.getSelectedRow()); + } - public void restoreState(Hashtable<?, ?> state) - { - categoryModel = (CatagoryTableModel) state.get(CatagoryTableModel.class); - selectedModel = (SelectedAbilityTreeViewModel) state.get(SelectedAbilityTreeViewModel.class); - availableModel = (AvailableAbilityTreeViewModel) state.get(AvailableAbilityTreeViewModel.class); - AbilityTransferHandler handler = (AbilityTransferHandler) state.get(AbilityTransferHandler.class); + public void restoreState(Hashtable<?, ?> state) + { + categoryModel = (CatagoryTableModel) state.get(CatagoryTableModel.class); + selectedModel = (SelectedAbilityTreeViewModel) state.get(SelectedAbilityTreeViewModel.class); + availableModel = + (AvailableAbilityTreeViewModel) state.get(AvailableAbilityTreeViewModel.class); + AbilityTransferHandler handler = + (AbilityTransferHandler) state.get(AbilityTransferHandler.class); - categoryTable.setModel(categoryModel); - selectedTreeViewPanel.setTransferHandler(handler); - availableTreeViewPanel.setTransferHandler(handler); + categoryTable.setModel(categoryModel); + selectedTreeViewPanel.setTransferHandler(handler); + availableTreeViewPanel.setTransferHandler(handler); - selectedTreeViewPanel.restoreState((Hashtable<?, ?>) state.get(SELECTED_TREEVIEW_PANEL_STATE)); - availableTreeViewPanel.restoreState((Hashtable<?, ?>) state.get(AVAILABLE_TREEVIEW_PANEL_STATE)); - } + selectedTreeViewPanel.restoreState( + (Hashtable<?, ?>) state.get(SELECTED_TREEVIEW_PANEL_STATE)); + availableTreeViewPanel.restoreState((Hashtable<?, ?>) state.get( + AVAILABLE_TREEVIEW_PANEL_STATE)); + } // private class PreReqTreeView implements TreeView<AbilityFacade> // { Modified: sandbox/cdomui/code/src/java/pcgen/persistence/lst/TokenStore.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/persistence/lst/TokenStore.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/persistence/lst/TokenStore.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -1,16 +1,18 @@ package pcgen.persistence.lst; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import pcgen.system.PluginLoader; import pcgen.util.Logging; /** * A Store of LST tokens, has a map and list representation */ -public class TokenStore +public class TokenStore implements PluginLoader { private static TokenStore inst; private HashMap<Class<? extends LstToken>, Map<String, LstToken>> tokenTypeMap; @@ -80,6 +82,16 @@ tokenTypeList.add(InstallLstToken.class); } + public void loadPlugin(Class<?> clazz) throws Exception + { + addToTokenMap((LstToken) clazz.newInstance()); + } + + public Class[] getPluginClasses() + { + return new Class[]{LstToken.class}; + } + /** * Add the new token to the token map * @param newToken Modified: sandbox/cdomui/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -33,13 +33,14 @@ import pcgen.core.prereq.Prerequisite; import pcgen.core.prereq.PrerequisiteOperator; import pcgen.persistence.PersistenceLayerException; +import pcgen.system.PluginLoader; import pcgen.util.Logging; /** * @author wardc * */ -public class PreParserFactory +public class PreParserFactory implements PluginLoader { private static PreParserFactory instance = null; private static Map<String, PrerequisiteParserInterface> parserLookup = @@ -50,6 +51,17 @@ register(new PreMultParser()); } + public void loadPlugin(Class<?> clazz) throws Exception + { + register((PrerequisiteParserInterface) clazz.newInstance()); + } + + @SuppressWarnings("unchecked") + public Class[] getPluginClasses() + { + return new Class[]{PrerequisiteParserInterface.class}; + } + /** * @return Returns the instance. * @throws PersistenceLayerException Modified: sandbox/cdomui/code/src/java/pcgen/rules/persistence/TokenLibrary.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/rules/persistence/TokenLibrary.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/rules/persistence/TokenLibrary.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -28,6 +28,7 @@ import pcgen.base.util.DoubleKeyMap; import pcgen.cdom.base.CDOMObject; import pcgen.core.PCClass; +import pcgen.persistence.lst.LstToken; import pcgen.persistence.lst.prereq.PrerequisiteParserInterface; import pcgen.rules.persistence.token.CDOMCompatibilityToken; import pcgen.rules.persistence.token.CDOMPrimaryToken; @@ -40,9 +41,10 @@ import pcgen.rules.persistence.token.PrimitiveToken; import pcgen.rules.persistence.token.QualifierToken; import pcgen.rules.persistence.util.TokenFamily; +import pcgen.system.PluginLoader; import pcgen.util.Logging; -public class TokenLibrary +public class TokenLibrary implements PluginLoader { private static final Class<PCClass> PCCLASS_CLASS = PCClass.class; @@ -63,6 +65,50 @@ TOKEN_FAMILIES.add(TokenFamily.REV514); } + private static TokenLibrary instance = null; + + private TokenLibrary() + { + } + + public static TokenLibrary getInstance() + { + if (instance == null) + { + instance = new TokenLibrary(); + } + return instance; + } + + public void loadPlugin(Class<?> clazz) throws InstantiationException, IllegalAccessException + { + Object token = clazz.newInstance(); + if(LstToken.class.isAssignableFrom(clazz) + || PrerequisiteParserInterface.class.isAssignableFrom(clazz)) + { + addToTokenMap(token); + } + if(QualifierToken.class.isAssignableFrom(clazz)) + { + addToQualifierMap((QualifierToken<?>) token); + } + if(PrimitiveToken.class.isAssignableFrom(clazz)) + { + addToPrimitiveMap((PrimitiveToken<?>) token); + } + } + + public Class[] getPluginClasses() + { + return new Class[] + { + LstToken.class, + QualifierToken.class, + PrimitiveToken.class, + PrerequisiteParserInterface.class + }; + } + public static <T> PrimitiveToken<T> getPrimitive(Class<T> name, String tokKey) { Added: sandbox/cdomui/code/src/java/pcgen/system/Main.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/system/Main.java (rev 0) +++ sandbox/cdomui/code/src/java/pcgen/system/Main.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -0,0 +1,66 @@ +/* + * Main.java + * Copyright 2009 Connor Petty <cpm...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on Sep 1, 2009, 6:17:59 PM + */ +package pcgen.system; + +import java.util.Observable; +import java.util.Observer; +import java.util.logging.Level; +import java.util.logging.Logger; +import pcgen.core.SettingsHandler; +import pcgen.core.bonus.Bonus; +import pcgen.gui2.SplashScreen; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.rules.persistence.TokenLibrary; + +/** + * + * @author Connor Petty <cpm...@us...> + */ +public class Main +{ + + /** + * @param args the command line arguments + */ + public static void main(String[] args) + { + loadPlugins(); + } + + private static void loadPlugins() + { + PluginClassLoader loader = new PluginClassLoader(SettingsHandler.getGmgenPluginDir()); + loader.addPluginLoader(TokenLibrary.getInstance()); + loader.addPluginLoader(Bonus.getInstance()); + try + { + loader.addPluginLoader(PreParserFactory.getInstance()); + } + catch (PersistenceLayerException ex) + { + Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); + } + loader.addObserver(new SplashScreen()); + loader.loadPlugins(); + } + +} Modified: sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/system/PluginClassLoader.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -67,12 +67,14 @@ public void loadPlugins() { + setChanged(); notifyObservers(jarURLs.size()); while (!jarURLs.isEmpty()) { URL url = jarURLs.poll(); try { + setChanged(); notifyObservers(url); processURL(url); } @@ -82,6 +84,7 @@ null, ex); } } + setChanged(); notifyObservers("DONE"); } @@ -103,7 +106,7 @@ { processClass(Class.forName(name, true, loader)); } - catch (ClassNotFoundException ex) + catch (Exception ex) { Logger.getLogger(PluginClassLoader.class.getName()).log(Level.SEVERE, null, ex); } @@ -117,6 +120,7 @@ int modifiers = clazz.getModifiers(); if (!Modifier.isInterface(modifiers) && !Modifier.isAbstract(modifiers)) { + boolean loaded = false; for (Class<?> key : loaderMap.getKeySet()) { if (key != null && !key.isAssignableFrom(clazz)) @@ -125,22 +129,26 @@ } for (PluginLoader loader : loaderMap.getListFor(key)) { + try { loader.loadPlugin(clazz); } - catch (InstantiationException ex) + catch (Exception ex) { Logger.getLogger(PluginClassLoader.class.getName()).log(Level.SEVERE, null, ex); } - catch (IllegalAccessException ex) + finally { - Logger.getLogger(PluginClassLoader.class.getName()).log(Level.SEVERE, null, - ex); + loaded = true; } } } + if(!loaded) + { + Logging.log(Logging.WARNING, "PluginLoader not found for "+clazz); + } } } Modified: sandbox/cdomui/code/src/java/pcgen/system/PluginLoader.java =================================================================== --- sandbox/cdomui/code/src/java/pcgen/system/PluginLoader.java 2009-09-02 01:38:15 UTC (rev 10383) +++ sandbox/cdomui/code/src/java/pcgen/system/PluginLoader.java 2009-09-02 08:10:52 UTC (rev 10384) @@ -20,8 +20,6 @@ */ package pcgen.system; -import java.util.List; - /** * * @author Connor Petty <cpm...@us...> @@ -29,8 +27,8 @@ public interface PluginLoader { - public void loadPlugin(Class<?> clazz) throws InstantiationException, IllegalAccessException; + public void loadPlugin(Class<?> clazz) throws Exception; - public List<Class<?>> getPluginClasses(); + public Class[] getPluginClasses(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |