Fixed an exception in ItemCategoryStep / TermWidget when no category is selected

git-svn-id: https://svn.libreccm.org/ccm/trunk@5194 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2018-01-12 13:34:07 +00:00
parent 5e8100bd94
commit ff14e57ea6
2 changed files with 44 additions and 32 deletions

View File

@ -29,7 +29,6 @@ import com.arsdigita.bebop.parameters.BigDecimalParameter;
import com.arsdigita.bebop.Resettable; import com.arsdigita.bebop.Resettable;
import com.arsdigita.web.RedirectSignal; import com.arsdigita.web.RedirectSignal;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
@ -41,12 +40,12 @@ import java.math.BigDecimal;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* *
* *
*/ */
public class ItemCategoryStep extends SimpleContainer public class ItemCategoryStep extends SimpleContainer
implements Resettable{ implements Resettable {
private static final Logger s_log = Logger.getLogger(ItemCategoryStep.class); private static final Logger s_log = Logger.getLogger(ItemCategoryStep.class);
private ItemCategorySummary m_summary; private ItemCategorySummary m_summary;
@ -57,7 +56,7 @@ public class ItemCategoryStep extends SimpleContainer
private BigDecimalParameter m_root; private BigDecimalParameter m_root;
private StringParameter m_mode; private StringParameter m_mode;
public ItemCategoryStep(ItemSelectionModel itemModel, public ItemCategoryStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) { AuthoringKitWizard parent) {
super("cms:categoryStep", CMS.CMS_XML_NS); super("cms:categoryStep", CMS.CMS_XML_NS);
@ -66,30 +65,33 @@ public class ItemCategoryStep extends SimpleContainer
m_summary = new ItemCategorySummary(); m_summary = new ItemCategorySummary();
m_summary.registerAction(ItemCategorySummary.ACTION_ADD, m_summary.registerAction(ItemCategorySummary.ACTION_ADD,
new AddActionListener("plain")); new AddActionListener("plain"));
m_summary.registerAction(ItemCategorySummary.ACTION_ADD_JS, m_summary.registerAction(ItemCategorySummary.ACTION_ADD_JS,
new AddActionListener("javascript")); new AddActionListener("javascript"));
Class addForm = ContentSection.getConfig().getCategoryAuthoringAddForm(); Class addForm = ContentSection.getConfig().getCategoryAuthoringAddForm();
m_add = (SimpleComponent) m_add = (SimpleComponent) Classes.newInstance(addForm,
Classes.newInstance(addForm, new Class[]{
new Class[] { BigDecimalParameter.class, BigDecimalParameter.class,
StringParameter.class }, StringParameter.class},
new Object[] { m_root, m_mode }); new Object[]{m_root,
m_mode});
m_add.addCompletionListener(new ResetListener()); m_add.addCompletionListener(new ResetListener());
Class extensionClass = ContentSection.getConfig().getCategoryAuthoringExtension(); Class extensionClass = ContentSection.getConfig()
ItemCategoryExtension extension = (ItemCategoryExtension) .getCategoryAuthoringExtension();
Classes.newInstance(extensionClass); ItemCategoryExtension extension = (ItemCategoryExtension) Classes
.newInstance(extensionClass);
m_extensionSummaries = extension.getSummary(); m_extensionSummaries = extension.getSummary();
m_extensionForms = extension.getForm(); m_extensionForms = extension.getForm();
int nSummaries = m_extensionSummaries.length; int nSummaries = m_extensionSummaries.length;
int nForms= m_extensionForms.length; int nForms = m_extensionForms.length;
Assert.isTrue(nSummaries==nForms, "invalid CategoryStep extension"); Assert.isTrue(nSummaries == nForms, "invalid CategoryStep extension");
m_extensionsCount = nForms; m_extensionsCount = nForms;
for (int i=0;i<m_extensionsCount;i++) { for (int i = 0; i < m_extensionsCount; i++) {
m_extensionSummaries[i].addCompletionListener(new ExtensionListener(i)); m_extensionSummaries[i].addCompletionListener(new ExtensionListener(
i));
m_extensionForms[i].addCompletionListener(new ResetListener()); m_extensionForms[i].addCompletionListener(new ResetListener());
add(m_extensionSummaries[i]); add(m_extensionSummaries[i]);
add(m_extensionForms[i]); add(m_extensionForms[i]);
@ -101,10 +103,10 @@ public class ItemCategoryStep extends SimpleContainer
@Override @Override
public void register(Page p) { public void register(Page p) {
super.register(p); super.register(p);
p.setVisibleDefault(m_add, false); p.setVisibleDefault(m_add, false);
for (int i=0;i<m_extensionsCount;i++) { for (int i = 0; i < m_extensionsCount; i++) {
p.setVisibleDefault(m_extensionForms[i], false); p.setVisibleDefault(m_extensionForms[i], false);
} }
p.addGlobalStateParam(m_root); p.addGlobalStateParam(m_root);
p.addGlobalStateParam(m_mode); p.addGlobalStateParam(m_mode);
@ -114,16 +116,17 @@ public class ItemCategoryStep extends SimpleContainer
public void reset(PageState state) { public void reset(PageState state) {
state.setValue(m_root, null); state.setValue(m_root, null);
state.setValue(m_mode, null); state.setValue(m_mode, null);
m_summary.setVisible(state, true); m_summary.setVisible(state, true);
m_add.setVisible(state, false); m_add.setVisible(state, false);
for (int i=0;i<m_extensionsCount;i++) { for (int i = 0; i < m_extensionsCount; i++) {
m_extensionSummaries[i].setVisible(state, true); m_extensionSummaries[i].setVisible(state, true);
m_extensionForms[i].setVisible(state, false); m_extensionForms[i].setVisible(state, false);
} }
} }
private class AddActionListener implements ActionListener { private class AddActionListener implements ActionListener {
private String m_mode; private String m_mode;
public AddActionListener(String mode) { public AddActionListener(String mode) {
@ -133,7 +136,7 @@ public class ItemCategoryStep extends SimpleContainer
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
PageState state = e.getPageState(); PageState state = e.getPageState();
state.setValue(m_root, state.setValue(m_root,
new BigDecimal(state.getControlEventValue())); new BigDecimal(state.getControlEventValue()));
@ -142,37 +145,44 @@ public class ItemCategoryStep extends SimpleContainer
m_summary.setVisible(state, false); m_summary.setVisible(state, false);
m_add.setVisible(state, true); m_add.setVisible(state, true);
for (int i=0;i<m_extensionsCount;i++) { for (int i = 0; i < m_extensionsCount; i++) {
m_extensionSummaries[i].setVisible(state, false); m_extensionSummaries[i].setVisible(state, false);
m_extensionForms[i].setVisible(state, false); m_extensionForms[i].setVisible(state, false);
} }
} }
} }
private class ResetListener implements ActionListener { private class ResetListener implements ActionListener {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
PageState state = e.getPageState(); PageState state = e.getPageState();
reset(state); reset(state);
throw new RedirectSignal(state.toURL(), true); throw new RedirectSignal(state.toURL(), true);
} }
} }
private class ExtensionListener implements ActionListener { private class ExtensionListener implements ActionListener {
int extensionIndex; int extensionIndex;
public ExtensionListener(int i) { public ExtensionListener(int i) {
extensionIndex = i; extensionIndex = i;
} }
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
PageState state = e.getPageState(); PageState state = e.getPageState();
m_summary.setVisible(state, false); m_summary.setVisible(state, false);
m_add.setVisible(state, false); m_add.setVisible(state, false);
for (int i=0;i<m_extensionsCount;i++) { for (int i = 0; i < m_extensionsCount; i++) {
m_extensionSummaries[i].setVisible(state, false); m_extensionSummaries[i].setVisible(state, false);
} }
m_extensionForms[extensionIndex].setVisible(state, true); m_extensionForms[extensionIndex].setVisible(state, true);
} }
} }
} }

View File

@ -128,8 +128,10 @@ public class TermWidget extends Widget {
values = (BigDecimal[]) valueObj; values = (BigDecimal[]) valueObj;
selAncestorsValues = null; selAncestorsValues = null;
} else { } else {
throw new IllegalArgumentException( // throw new IllegalArgumentException(
"Value of TermWidget is not of type BigDecimal[] or BigDecimal[][]"); // "Value of TermWidget is not of type BigDecimal[] or BigDecimal[][]");
values = null;
selAncestorsValues = null;
} }
//BigDecimal[] values = (BigDecimal[]) getValue(state); //BigDecimal[] values = (BigDecimal[]) getValue(state);