203 lines
7.2 KiB
Java
Executable File
203 lines
7.2 KiB
Java
Executable File
/*
|
|
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
|
|
*
|
|
* 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
|
|
*
|
|
*/
|
|
package com.arsdigita.cms.ui.authoring;
|
|
|
|
|
|
import com.arsdigita.bebop.FormProcessException;
|
|
import com.arsdigita.bebop.Page;
|
|
import com.arsdigita.bebop.PageState;
|
|
import com.arsdigita.bebop.SimpleContainer;
|
|
import com.arsdigita.bebop.event.FormProcessListener;
|
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
|
import com.arsdigita.bebop.event.FormSubmissionListener;
|
|
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
|
import com.arsdigita.cms.contenttypes.GenericArticleImageAssociation;
|
|
import com.arsdigita.cms.ContentItem;
|
|
import com.arsdigita.cms.ContentType;
|
|
import com.arsdigita.cms.ImageAsset;
|
|
import com.arsdigita.cms.ItemCollection;
|
|
import com.arsdigita.cms.ItemSelectionModel;
|
|
import com.arsdigita.cms.SecurityManager;
|
|
import com.arsdigita.cms.dispatcher.Utilities;
|
|
import com.arsdigita.cms.ui.ImageBrowser;
|
|
import com.arsdigita.cms.ui.ImageChooser;
|
|
import com.arsdigita.cms.util.GlobalizationUtil;
|
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
|
import com.arsdigita.domain.DomainObjectFactory;
|
|
import com.arsdigita.persistence.OID;
|
|
import org.apache.log4j.Logger;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
/**
|
|
* A component that can assign an existing image to an article.
|
|
* Consists of an ImageChooser and an ImageSelectionForm
|
|
*
|
|
* @author Stanislav Freidin
|
|
* @author Michael Pih
|
|
* @version $Revision: #12 $ $DateTime: 2004/08/17 23:15:09 $
|
|
* @version $Id: ArticleImageChooser.java 287 2005-02-22 00:29:02Z sskracic $
|
|
*/
|
|
public class ArticleImageChooser extends SimpleContainer {
|
|
|
|
public static final String CHOSEN_IMAGE = "chim";
|
|
|
|
private static Logger s_log =
|
|
Logger.getLogger(ArticleImageChooser.class);
|
|
|
|
private final ItemSelectionModel m_assets;
|
|
private final ItemSelectionModel m_choiceModel;
|
|
|
|
private ImageChooser m_chooser;
|
|
private ImageSelectionForm m_form;
|
|
|
|
private BigDecimalParameter m_chosenImage;
|
|
|
|
|
|
/**
|
|
* Construct a new ArticleImageChooser
|
|
*/
|
|
public ArticleImageChooser(ItemSelectionModel itemModel,
|
|
ItemSelectionModel assetModel) {
|
|
super();
|
|
m_assets = assetModel;
|
|
|
|
m_chooser = new ImageChooser();
|
|
add(m_chooser);
|
|
|
|
// Show the form when an image is clicked
|
|
m_chooser.addImageActionListener(new ImageBrowser.LinkActionListener() {
|
|
public void linkClicked(PageState state, BigDecimal imageId) {
|
|
s_log.debug("SELECTING: " + imageId);
|
|
selectImage(state, imageId);
|
|
}
|
|
public void deleteClicked(PageState state, BigDecimal imageId) {
|
|
s_log.debug("DELETING: " + imageId);
|
|
deleteImage(state, imageId);
|
|
}
|
|
});
|
|
|
|
// Clone the asset model, since we don't want to contaminate
|
|
// the original data in case the user decides to cancel the
|
|
// form submission
|
|
m_chosenImage = new BigDecimalParameter(CHOSEN_IMAGE);
|
|
|
|
ContentType t = assetModel.getContentType();
|
|
if ( t == null ) {
|
|
m_choiceModel =
|
|
new ItemSelectionModel(assetModel.getJavaClass().getName(),
|
|
assetModel.getObjectType(),
|
|
m_chosenImage);
|
|
} else {
|
|
m_choiceModel =
|
|
new ItemSelectionModel(assetModel.getContentType(), m_chosenImage);
|
|
}
|
|
|
|
m_form = new ImageSelectionForm(itemModel, m_choiceModel);
|
|
|
|
// Hide the form again when the user clicks Cancel
|
|
m_form.addSubmissionListener(new FormSubmissionListener() {
|
|
public void submitted(FormSectionEvent e) throws FormProcessException {
|
|
PageState state = e.getPageState();
|
|
if(m_form.getSaveCancelSection().getCancelButton().isSelected(state)) {
|
|
deselectImage(state);
|
|
throw new FormProcessException( (String) GlobalizationUtil.globalize("cms.ui.authoring.submission_cancelled").localize());
|
|
}
|
|
}
|
|
});
|
|
|
|
// Propagate the image selection on success
|
|
m_form.addProcessListener(new FormProcessListener() {
|
|
public void process(FormSectionEvent e) throws FormProcessException {
|
|
PageState state = e.getPageState();
|
|
m_assets.setSelectedObject(state,
|
|
m_choiceModel.getSelectedObject(state));
|
|
}
|
|
});
|
|
|
|
add(m_form);
|
|
}
|
|
|
|
// Hide the form by default, register the "chosen image" parameter
|
|
public void register(Page p) {
|
|
p.addComponentStateParam(this, m_chosenImage);
|
|
p.setVisibleDefault(m_form, false);
|
|
}
|
|
|
|
/**
|
|
* @return the image selection form
|
|
*/
|
|
public ImageSelectionForm getImageSelectionForm() {
|
|
return m_form;
|
|
}
|
|
|
|
/**
|
|
* @return the image chooser
|
|
*/
|
|
public ImageChooser getImageChooser() {
|
|
return m_chooser;
|
|
}
|
|
|
|
/**
|
|
* Select the specified image and show the form
|
|
*/
|
|
public void selectImage(PageState s, BigDecimal imageId) {
|
|
s.setVisible(m_form, true);
|
|
s.setVisible(m_chooser, false);
|
|
m_choiceModel.setSelectedKey(s, imageId);
|
|
}
|
|
|
|
/**
|
|
* Select the specified image and show the form
|
|
*/
|
|
public void deleteImage(PageState s, BigDecimal imageId) {
|
|
SecurityManager sm = Utilities.getSecurityManager(s);
|
|
if (sm.canAccess(s.getRequest(),SecurityManager.DELETE_IMAGES) ) {
|
|
try {
|
|
ImageAsset asset = (ImageAsset) DomainObjectFactory.newInstance
|
|
(new OID(ImageAsset.BASE_DATA_OBJECT_TYPE,imageId));
|
|
if (!GenericArticleImageAssociation.imageHasAssociation(asset)) {
|
|
asset.setLive(null);
|
|
ItemCollection pendingVersions = asset.getPendingVersions();
|
|
while(pendingVersions.next()) {
|
|
ContentItem item = pendingVersions.getContentItem();
|
|
asset.removePendingVersion(item);
|
|
}
|
|
asset.delete();
|
|
|
|
}
|
|
} catch (DataObjectNotFoundException e) {
|
|
// can't find asset, don't delete
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Deselect the image and hide the form
|
|
*/
|
|
public void deselectImage(PageState s) {
|
|
s.setVisible(m_form, false);
|
|
s.setVisible(m_chooser, true);
|
|
m_choiceModel.clearSelection(s);
|
|
m_chooser.clearSelection(s);
|
|
}
|
|
|
|
}
|