CCM NG/ccm-cms: Next part of AssetPane

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4654 8810af33-2d31-482b-a856-94f89814c4df
ccm-docs
jensp 2017-03-30 10:44:53 +00:00
parent 6a0e01e6f7
commit 419d8288c7
10 changed files with 592 additions and 121 deletions

View File

@ -18,18 +18,38 @@
*/ */
package com.arsdigita.cms.ui.assets; package com.arsdigita.cms.ui.assets;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Image;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Link;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Paginator; import com.arsdigita.bebop.Paginator;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.Text;
import com.arsdigita.bebop.event.TableActionAdapter;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener; import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.table.DefaultTableCellRenderer;
import com.arsdigita.bebop.table.DefaultTableColumnModel; import com.arsdigita.bebop.table.DefaultTableColumnModel;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ui.folder.FolderBrowser;
import com.arsdigita.cms.ui.folder.FolderSelectionModel; import com.arsdigita.cms.ui.folder.FolderSelectionModel;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import java.util.Date;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil;
import javafx.scene.control.Pagination;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionManager;
import org.librecms.dispatcher.ItemResolver;
/** /**
* Browse folder and assets. * Browse folder and assets.
@ -48,7 +68,7 @@ public class AssetFolderBrowser extends Table {
private final FolderSelectionModel folderSelectionModel; private final FolderSelectionModel folderSelectionModel;
private TableActionListener folderChanger; private TableActionListener folderChanger;
private TableActionListener tableDeleter; private TableActionListener folderDeleter;
private TableColumn nameColumn; private TableColumn nameColumn;
private TableColumn deleteColumn; private TableColumn deleteColumn;
private final StringParameter sortTypeParameter = new StringParameter( private final StringParameter sortTypeParameter = new StringParameter(
@ -69,22 +89,6 @@ public class AssetFolderBrowser extends Table {
initComponents(); initComponents();
} }
protected FolderSelectionModel getFolderSelectionModel() {
return folderSelectionModel;
}
protected Paginator getPaginator() {
return paginator;
}
protected String getSortType(final PageState state) {
return (String) state.getValue(sortTypeParameter);
}
protected String getSortDirection(final PageState state) {
return (String) state.getValue(sortDirectionParameter);
}
private void initComponents() { private void initComponents() {
setModelBuilder(new AssetFolderBrowserTableModelBuilder()); setModelBuilder(new AssetFolderBrowserTableModelBuilder());
@ -96,6 +100,71 @@ public class AssetFolderBrowser extends Table {
globalize("cms.ui.folder.creation_date"), globalize("cms.ui.folder.creation_date"),
globalize("cms.ui.folder.last_modified"), globalize("cms.ui.folder.last_modified"),
globalize("cms.ui.folder.action")}; globalize("cms.ui.folder.action")};
setModelBuilder(new AssetFolderBrowserTableModelBuilder());
setColumnModel(new DefaultTableColumnModel(headers));
setClassAttr("dataTable");
getHeader().setDefaultRenderer(new DefaultTableCellRenderer());
nameColumn = getColumn(AssetFolderBrowserTableModel.COL_NAME);
nameColumn.setCellRenderer(new NameCellRenderer());
nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME));
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
.setHeaderRenderer(
new HeaderCellRenderer(SORT_KEY_CREATION_DATE));
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
.setCellRenderer(new DateCellRenderer());
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
.setHeaderRenderer(new HeaderCellRenderer(
SORT_KEY_LAST_MODIFIED_DATE));
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
.setCellRenderer(new DateCellRenderer());
deleteColumn = getColumn(AssetFolderBrowserTableModel.COL_ACTION);
deleteColumn.setCellRenderer(new ActionCellRenderer());
deleteColumn.setAlign("center");
folderChanger = new FolderChanger();
addTableActionListener(folderChanger);
folderDeleter = new ItemDeleter();
addTableActionListener(folderDeleter);
setEmptyView(new Label(globalize("cms.ui.folder.no_assets")));
}
@Override
public void register(final Page page) {
super.register(page);
page.addComponentStateParam(this, folderSelectionModel.
getStateParameter());
page.addComponentStateParam(this, sortTypeParameter);
page.addComponentStateParam(this, sortDirectionParameter);
}
protected FolderSelectionModel getFolderSelectionModel() {
return folderSelectionModel;
}
protected Paginator getPaginator() {
return paginator;
}
protected void setPaginator(final Paginator paginator) {
this.paginator = paginator;
}
protected String getSortType(final PageState state) {
return (String) state.getValue(sortTypeParameter);
}
protected String getSortDirection(final PageState state) {
return (String) state.getValue(sortDirectionParameter);
} }
/** /**
@ -108,4 +177,233 @@ public class AssetFolderBrowser extends Table {
} }
private class HeaderCellRenderer extends DefaultTableCellRenderer {
private final String headerKey;
public HeaderCellRenderer(final String headerKey) {
super(true);
this.headerKey = headerKey;
}
@Override
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
final GlobalizedMessage headerName = (GlobalizedMessage) value;
final String sortKey = (String) state.getValue(sortTypeParameter);
final boolean isCurrentKey = sortKey.equals(key);
final String currentSortDirection = (String) state
.getValue(sortDirectionParameter);
final String imageUrlStub;
if (SORT_ACTION_UP.equals(currentSortDirection)) {
imageUrlStub = "gray-triangle-up.gif";
} else {
imageUrlStub = "gray-triangle-down.gif";
}
final ControlLink link = new ControlLink(new Label(headerName)) {
@Override
public void setControlEvent(final PageState state) {
String sortDirectionAction;
// by default, everything sorts "up" unless it
// is the current key and it is already pointing up
if (SORT_ACTION_UP.equals(currentSortDirection)
&& isCurrentKey) {
sortDirectionAction = SORT_ACTION_DOWN;
} else {
sortDirectionAction = SORT_ACTION_UP;
}
state.setControlEvent(table,
sortDirectionAction,
headerKey);
}
};
final Label label = new Label();
label.setLabel(headerName);
label.setClassAttr("folderBrowserLink");
label.setOutputEscaping(false);
label.setFontWeight(Label.BOLD);
final SimpleContainer container = new SimpleContainer();
container.add(label);
if (isCurrentKey) {
Image image = new Image("/assets/" + imageUrlStub);
image.setBorder("0");
container.add(image);
}
link.setChild(container);
return link;
}
}
/**
* Produce links to view an item or control links for folders to change into
* the folder.
*/
private class NameCellRenderer extends DefaultTableCellRenderer {
public NameCellRenderer() {
super(true);
}
@Override
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
final String name = (String) value;
final ContentSection section = CMS.getContext().
getContentSection();
final ContentSectionManager sectionManager = CdiUtil.
createCdiUtil()
.findBean(ContentSectionManager.class);
final boolean isFolder = ((AssetFolderBrowserTableModel) table
.getTableModel(state))
.isFolder();
final long objectId = getObjectId(key);
if (isFolder) {
//return new ControlLink(new Text(name));
return super.getComponent(table,
state,
value,
isSelected,
objectId,
row,
column);
} else {
// return new Link(new Text(name),
// itemResolver.generateItemURL(state,
// objectId,
// name,
// section,
// "DRAFT"));
return new Text(name);
}
}
}
private class DateCellRenderer implements TableCellRenderer {
@Override
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
if (value instanceof Date) {
final Date date = (Date) value;
return new Text(String.format("%1$TF %1$TT", date));
} else if (value == null) {
return new Text("");
} else {
return new Text(value.toString());
}
}
}
/**
* Produce delete links for items and non-empty folders.
*/
private class ActionCellRenderer implements TableCellRenderer {
@Override
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
if (((Boolean) value)) {
return new Label(" ", false);
} else {
final ControlLink link = new ControlLink(
new Label(new GlobalizedMessage("cms.ui.folder.delete",
CmsConstants.CMS_BUNDLE)));
link.setConfirmation(
new GlobalizedMessage(
"cms.ui.folder.delete_confirmation",
CmsConstants.CMS_BUNDLE));
return link;
}
}
}
// Deletes an item
private class ItemDeleter extends TableActionAdapter {
@Override
public void cellSelected(final TableActionEvent event) {
int col = event.getColumn();
if (deleteColumn != getColumn(col)) {
return;
}
final PageState state = event.getPageState();
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean(
AssetFolderBrowserController.class);
controller.deleteObject((String) event.getRowKey());
((Table) event.getSource()).clearSelection(state);
}
}
private class FolderChanger extends TableActionAdapter {
@Override
public void cellSelected(final TableActionEvent event) {
final PageState state = event.getPageState();
final int col = event.getColumn();
if (nameColumn != getColumn(col)) {
return;
}
clearSelection(state);
getFolderSelectionModel().setSelectedKey(
state,
getObjectId(event.getRowKey()));
}
}
private long getObjectId(final Object key) {
final String keyStr = (String) key;
if (keyStr.startsWith("folder-")) {
return Long.parseLong(keyStr.substring("folder-".length()));
} else if (keyStr.startsWith("asset-")) {
return Long.parseLong(keyStr.substring("asset-".length()));
} else {
return Long.parseLong(keyStr);
}
}
} }

View File

@ -38,6 +38,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@ -52,6 +53,9 @@ import javax.persistence.criteria.Order;
import javax.persistence.criteria.Path; import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import org.libreccm.core.CcmObject;
import org.librecms.contentsection.AssetRepository;
import org.librecms.contentsection.FolderRepository;
/** /**
* *
@ -72,6 +76,12 @@ public class AssetFolderBrowserController {
@Inject @Inject
private AssetTypesManager typesManager; private AssetTypesManager typesManager;
@Inject
private FolderRepository folderRepo;
@Inject
private AssetRepository assetRepo;
@Inject @Inject
private GlobalizationHelper globalizationHelper; private GlobalizationHelper globalizationHelper;
@ -110,13 +120,13 @@ public class AssetFolderBrowserController {
return subFolderRows; return subFolderRows;
} else { } else {
final int maxAssets = maxResults - subFolders.size(); final int maxAssets = maxResults - subFolders.size();
final int firstItem = firstResult - subFolders.size(); final int firstAsset = firstResult - subFolders.size();
final List<Asset> assets = findAssetsInFolder(folder, final List<Asset> assets = findAssetsInFolder(folder,
orderBy, orderBy,
orderDirection, orderDirection,
firstResult, firstAsset,
maxResults); maxAssets);
final List<AssetFolderBrowserTableRow> assetRows = assets final List<AssetFolderBrowserTableRow> assetRows = assets
.stream() .stream()
.map(asset -> buildRow(asset)) .map(asset -> buildRow(asset))
@ -130,6 +140,76 @@ public class AssetFolderBrowserController {
} }
} }
@Transactional(Transactional.TxType.REQUIRED)
protected long countObjects(final Folder folder) {
Objects.requireNonNull(folder);
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class);
final Root<CcmObject> from = criteriaQuery.from(CcmObject.class);
criteriaQuery = criteriaQuery.select(builder.count(from));
final List<Folder> subFolders = findSubFolders(
folder,
AssetFolderBrowser.SORT_KEY_NAME,
AssetFolderBrowser.SORT_ACTION_UP,
-1,
-1);
final List<Asset> assets = findAssetsInFolder(
folder,
AssetFolderBrowser.SORT_KEY_NAME,
AssetFolderBrowser.SORT_ACTION_UP,
-1,
-1);
if (subFolders.isEmpty() && assets.isEmpty()) {
return 0;
} else if(subFolders.isEmpty() && !assets.isEmpty()) {
criteriaQuery = criteriaQuery.where(from.in(assets));
} else if (!subFolders.isEmpty() && assets.isEmpty()) {
criteriaQuery = criteriaQuery.where(from.in(subFolders));
} else {
criteriaQuery = criteriaQuery.where(builder.or(
from.in(subFolders),
from.in(assets)));
}
return entityManager.createQuery(criteriaQuery).getSingleResult();
}
/**
* Called by the {@link AssetFolderBrowser} to delete an object.
*
* @param objectId
*/
@Transactional(Transactional.TxType.REQUIRED)
protected void deleteObject(final String objectId) {
Objects.requireNonNull(objectId);
if (objectId.startsWith("folder-")) {
final long folderId = Long.parseLong(
objectId.substring("folder-".length()));
folderRepo
.findById(folderId)
.ifPresent(folderRepo::delete);
} else if (objectId.startsWith("asset-")) {
final long assetId = Long.parseLong(
objectId.substring("asset-".length()));
assetRepo
.findById(assetId)
.ifPresent(assetRepo::delete);
} else {
throw new IllegalArgumentException(
"The objectId is expected to start with 'folder-' or 'item.'.");
}
}
private AssetFolderBrowserTableRow buildRow(final Folder folder) { private AssetFolderBrowserTableRow buildRow(final Folder folder) {
final AssetFolderBrowserTableRow row = new AssetFolderBrowserTableRow(); final AssetFolderBrowserTableRow row = new AssetFolderBrowserTableRow();
@ -189,7 +269,8 @@ public class AssetFolderBrowserController {
final Order order; final Order order;
if (AssetFolderBrowser.SORT_KEY_NAME.equals(orderBy) if (AssetFolderBrowser.SORT_KEY_NAME.equals(orderBy)
&& AssetFolderBrowser.SORT_ACTION_DOWN.equals(orderDirection)) { && AssetFolderBrowser.SORT_ACTION_DOWN.
equals(orderDirection)) {
order = builder.desc(from.get("name")); order = builder.desc(from.get("name"));
} else { } else {
order = builder.asc(from.get("name")); order = builder.asc(from.get("name"));
@ -198,7 +279,8 @@ public class AssetFolderBrowserController {
final TypedQuery<Folder> query = entityManager final TypedQuery<Folder> query = entityManager
.createQuery( .createQuery(
criteria.where( criteria.where(
builder.equal(from.get("parentCategory"), folder) builder.
equal(from.get("parentCategory"), folder)
) )
.orderBy(order) .orderBy(order)
); );
@ -254,7 +336,8 @@ public class AssetFolderBrowserController {
criteria.select(fromAsset) criteria.select(fromAsset)
.where( .where(
builder.and( builder.and(
builder.equal(join.get("category"), folder), builder.equal(join.get(
"category"), folder),
builder.equal(join.get("type"), builder.equal(join.get("type"),
CmsConstants.CATEGORIZATION_TYPE_FOLDER) CmsConstants.CATEGORIZATION_TYPE_FOLDER)
) )

View File

@ -0,0 +1,65 @@
/*
* Copyright (C) 2017 LibreCCM Foundation.
*
* 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., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.cms.ui.assets;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.PaginationModelBuilder;
import com.arsdigita.bebop.Paginator;
import com.arsdigita.cms.ui.folder.FolderSelectionModel;
import org.libreccm.cdi.utils.CdiUtil;
import org.librecms.contentsection.Folder;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
class AssetFolderBrowserPaginationModelBuilder implements PaginationModelBuilder {
private final AssetFolderBrowser folderBrowser;
public AssetFolderBrowserPaginationModelBuilder(
final AssetFolderBrowser folderBrowser) {
this.folderBrowser = folderBrowser;
}
@Override
public int getTotalSize(final Paginator paginator, final PageState state) {
final FolderSelectionModel folderSelectionModel = folderBrowser
.getFolderSelectionModel();
final Folder folder = folderSelectionModel.getSelectedObject(state);
if (folder == null) {
return 0;
} else {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean(
AssetFolderBrowserController.class);
return (int) controller.countObjects(folder);
}
}
@Override
public boolean isVisible(final PageState state) {
return folderBrowser != null && folderBrowser.isVisible(state);
}
}

View File

@ -30,14 +30,15 @@ import java.util.List;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class AssetFolderBrowserTableModel implements TableModel { class AssetFolderBrowserTableModel implements TableModel {
private static final int COL_NAME = 0; protected static final int COL_NAME = 0;
private static final int COL_TITLE = 1; protected static final int COL_TITLE = 1;
private static final int COL_TYPE = 2; protected static final int COL_TYPE = 2;
private static final int COL_CREATION_DATE = 3; protected static final int COL_CREATION_DATE = 3;
private static final int COL_LAST_MODIFIED = 4; protected static final int COL_LAST_MODIFIED = 4;
private static final int COL_DELETEABLE = 5; protected static final int COL_DELETEABLE = 5;
protected static final int COL_ACTION = 6;
private final Iterator<AssetFolderBrowserTableRow> iterator; private final Iterator<AssetFolderBrowserTableRow> iterator;
private AssetFolderBrowserTableRow currentRow; private AssetFolderBrowserTableRow currentRow;

View File

@ -23,6 +23,7 @@ import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Page; import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Paginator;
import com.arsdigita.bebop.Resettable; import com.arsdigita.bebop.Resettable;
import com.arsdigita.bebop.SegmentedPanel; import com.arsdigita.bebop.SegmentedPanel;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
@ -37,7 +38,6 @@ import com.arsdigita.bebop.event.PrintEvent;
import com.arsdigita.bebop.event.PrintListener; import com.arsdigita.bebop.event.PrintListener;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ui.BaseTree; import com.arsdigita.cms.ui.BaseTree;
import com.arsdigita.cms.ui.folder.FolderBrowser;
import com.arsdigita.cms.ui.folder.FolderCreateForm; import com.arsdigita.cms.ui.folder.FolderCreateForm;
import com.arsdigita.cms.ui.folder.FolderEditorForm; import com.arsdigita.cms.ui.folder.FolderEditorForm;
import com.arsdigita.cms.ui.folder.FolderRequestLocal; import com.arsdigita.cms.ui.folder.FolderRequestLocal;
@ -55,6 +55,7 @@ import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.Folder; import org.librecms.contentsection.Folder;
import java.util.List; import java.util.List;
import org.arsdigita.cms.CMSConfig;
/** /**
* *
@ -69,8 +70,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
private final FolderSelectionModel folderSelectionModel; private final FolderSelectionModel folderSelectionModel;
private final FolderRequestLocal folderRequestLocal; private final FolderRequestLocal folderRequestLocal;
private SegmentedPanel.Segment currentFolderSegment; private AssetFolderBrowser folderBrowser;
private SegmentedPanel.Segment browseSegment; private SegmentedPanel.Segment browseSegment;
private SegmentedPanel.Segment currentFolderSegment;
private SegmentedPanel.Segment actionsSegment;
private SegmentedPanel.Segment newFolderSegment; private SegmentedPanel.Segment newFolderSegment;
private SegmentedPanel.Segment editFolderSegment; private SegmentedPanel.Segment editFolderSegment;
@ -118,6 +122,15 @@ public class AssetPane extends LayoutPanel implements Resettable {
final SegmentedPanel panel = new SegmentedPanel(); final SegmentedPanel panel = new SegmentedPanel();
browseSegment = panel.addSegment();
folderBrowser = new AssetFolderBrowser(folderSelectionModel);
final Paginator paginator = new Paginator(
new AssetFolderBrowserPaginationModelBuilder(folderBrowser),
CMSConfig.getConfig().getFolderBrowseListSize());
folderBrowser.setPaginator(paginator);
browseSegment.add(paginator);
browseSegment.add(folderBrowser);
currentFolderSegment = panel.addSegment(); currentFolderSegment = panel.addSegment();
currentFolderSegment.addHeader(new Text("Current folder")); currentFolderSegment.addHeader(new Text("Current folder"));
final Label currentFolderLabel = new Label(); final Label currentFolderLabel = new Label();
@ -141,12 +154,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
}); });
currentFolderSegment.add(currentFolderLabel); currentFolderSegment.add(currentFolderLabel);
browseSegment = panel.addSegment(); actionsSegment = panel.addSegment();
browseSegment.setIdAttr("folder-browse"); actionsSegment.setIdAttr("folder-browse");
final ActionGroup actions = new ActionGroup(); final ActionGroup actions = new ActionGroup();
browseSegment.add(actions); actionsSegment.add(actions);
final FolderCreateForm folderCreateForm = new FolderCreateForm( final FolderCreateForm folderCreateForm = new FolderCreateForm(
"fcreat", folderSelectionModel); "fcreat", folderSelectionModel);
@ -262,6 +274,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
protected void browseMode(final PageState state) { protected void browseMode(final PageState state) {
browseSegment.setVisible(state, true); browseSegment.setVisible(state, true);
actionsSegment.setVisible(state, true);
newFolderSegment.setVisible(state, false); newFolderSegment.setVisible(state, false);
editFolderSegment.setVisible(state, false); editFolderSegment.setVisible(state, false);
@ -269,12 +282,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
protected void newFolderMode(final PageState state) { protected void newFolderMode(final PageState state) {
browseSegment.setVisible(state, false); browseSegment.setVisible(state, false);
actionsSegment.setVisible(state, false);
newFolderSegment.setVisible(state, true); newFolderSegment.setVisible(state, true);
editFolderSegment.setVisible(state, false); editFolderSegment.setVisible(state, false);
} }
protected void editFolderMode(final PageState state) { protected void editFolderMode(final PageState state) {
browseSegment.setVisible(state, false); browseSegment.setVisible(state, false);
actionsSegment.setVisible(state, false);
newFolderSegment.setVisible(state, false); newFolderSegment.setVisible(state, false);
editFolderSegment.setVisible(state, true); editFolderSegment.setVisible(state, true);
} }
@ -288,6 +303,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
page.addActionListener(new FolderListener()); page.addActionListener(new FolderListener());
page.setVisibleDefault(browseSegment, true); page.setVisibleDefault(browseSegment, true);
page.setVisibleDefault(actionsSegment, true);
page.setVisibleDefault(newFolderSegment, false); page.setVisibleDefault(newFolderSegment, false);
page.setVisibleDefault(editFolderSegment, false); page.setVisibleDefault(editFolderSegment, false);
} }
@ -297,6 +313,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
super.reset(state); super.reset(state);
folderBrowser.getPaginator().reset(state);
} }
private final class FolderListener implements ActionListener { private final class FolderListener implements ActionListener {

View File

@ -38,8 +38,8 @@ class FolderBrowserPaginationModelBuilder implements PaginationModelBuilder {
} }
@Override @Override
public int getTotalSize(final Paginator paginator, public int getTotalSize(final Paginator paginator, final PageState state) {
final PageState state) {
final FolderSelectionModel folderSelectionModel = folderBrowser final FolderSelectionModel folderSelectionModel = folderBrowser
.getFolderSelectionModel(); .getFolderSelectionModel();
final Folder folder = folderSelectionModel.getSelectedObject(state); final Folder folder = folderSelectionModel.getSelectedObject(state);

View File

@ -245,3 +245,4 @@ cms.ui.type.workflow.select=Select default workflow
cms.ui.type.select=Select Content Type cms.ui.type.select=Select Content Type
cms.ui.type.select.none=There are no available content types to select cms.ui.type.select.none=There are no available content types to select
cms.ui.assets=Assets cms.ui.assets=Assets
cms.ui.folder.no_assets=No assets

View File

@ -244,3 +244,4 @@ cms.ui.type.workflow.select=Voreingestellten Arbeitsablauf ausw\u00e4hlen
cms.ui.type.select=Dolkumententype ausw\u00e4hlen cms.ui.type.select=Dolkumententype ausw\u00e4hlen
cms.ui.type.select.none=Keine verf\u00fcgbaren Dokumententypen cms.ui.type.select.none=Keine verf\u00fcgbaren Dokumententypen
cms.ui.assets=Medien & Daten cms.ui.assets=Medien & Daten
cms.ui.folder.no_assets=Keine Medien oder Datens\u00e4tze vorhanden

View File

@ -203,3 +203,4 @@ cms.ui.type.workflow.select=Select default workflow
cms.ui.type.select=Select Content Type cms.ui.type.select=Select Content Type
cms.ui.type.select.none=There are no available content types to select cms.ui.type.select.none=There are no available content types to select
cms.ui.assets=Assets cms.ui.assets=Assets
cms.ui.folder.no_assets=No assets

View File

@ -103,7 +103,10 @@ public class ParameterSingleSelectionModel<T>
if (Assert.isEnabled()) { if (Assert.isEnabled()) {
final FormModel model = state.getPage().getStateModel(); final FormModel model = state.getPage().getStateModel();
Assert.isTrue(model.containsFormParam(m_parameter)); Assert.isTrue(model.containsFormParam(m_parameter),
String.format(
"Parameter %s is not part of the FormModel.",
m_parameter.getName()));
} }
state.setValue(m_parameter, newKey); state.setValue(m_parameter, newKey);