CCM NG/ccm-cms: BrowsePane Expanding/collapsing of the folder on the left.
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4580 8810af33-2d31-482b-a856-94f89814c4df
Former-commit-id: c381a96446
pull/2/head
parent
36483ce25f
commit
0a25f0f03e
|
|
@ -10,7 +10,7 @@
|
||||||
<AppenderRef ref="Console"/>
|
<AppenderRef ref="Console"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
||||||
<Logger name="org.hibernate"
|
<!--<Logger name="org.hibernate"
|
||||||
level="info">
|
level="info">
|
||||||
</Logger>
|
</Logger>
|
||||||
<Logger name="org.hibernate.SQL"
|
<Logger name="org.hibernate.SQL"
|
||||||
|
|
@ -21,6 +21,10 @@
|
||||||
</Logger>
|
</Logger>
|
||||||
<Logger name="org.hibernate.type.descriptor.sql"
|
<Logger name="org.hibernate.type.descriptor.sql"
|
||||||
level="trace">
|
level="trace">
|
||||||
|
</Logger>-->
|
||||||
|
|
||||||
|
<Logger name="com.arsdigita.cms.ui.folder.FolderBrowserTableModelBuilder"
|
||||||
|
level="debug">
|
||||||
</Logger>
|
</Logger>
|
||||||
|
|
||||||
<Logger name="com.arsdigita.ui.admin.AdminServlet"
|
<Logger name="com.arsdigita.ui.admin.AdminServlet"
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.Paginator;
|
import com.arsdigita.bebop.Paginator;
|
||||||
import com.arsdigita.bebop.SimpleContainer;
|
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.ActionEvent;
|
import com.arsdigita.bebop.event.ActionEvent;
|
||||||
import com.arsdigita.bebop.event.ActionListener;
|
import com.arsdigita.bebop.event.ActionListener;
|
||||||
import com.arsdigita.bebop.event.TableActionAdapter;
|
import com.arsdigita.bebop.event.TableActionAdapter;
|
||||||
|
|
@ -59,6 +60,9 @@ import org.librecms.contentsection.ContentSectionManager;
|
||||||
import org.librecms.contentsection.privileges.ItemPrivileges;
|
import org.librecms.contentsection.privileges.ItemPrivileges;
|
||||||
import org.librecms.dispatcher.ItemResolver;
|
import org.librecms.dispatcher.ItemResolver;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Browse folders and items. If the user clicks on a folder, the folder
|
* Browse folders and items. If the user clicks on a folder, the folder
|
||||||
* selection model is updated. If the user clicks on any other item, an separate
|
* selection model is updated. If the user clicks on any other item, an separate
|
||||||
|
|
@ -74,7 +78,7 @@ public class FolderBrowser extends Table {
|
||||||
globalize("cms.ui.folder.name"),
|
globalize("cms.ui.folder.name"),
|
||||||
globalize("cms.ui.folder.languages"),
|
globalize("cms.ui.folder.languages"),
|
||||||
globalize("cms.ui.folder.title"),
|
globalize("cms.ui.folder.title"),
|
||||||
// globalize("cms.ui.folder.additionalInfo"),
|
// globalize("cms.ui.folder.additionalInfo"),
|
||||||
globalize("cms.ui.folder.type"),
|
globalize("cms.ui.folder.type"),
|
||||||
globalize("cms.ui.folder.creation_date"),
|
globalize("cms.ui.folder.creation_date"),
|
||||||
globalize("cms.ui.folder.last_modified"),
|
globalize("cms.ui.folder.last_modified"),
|
||||||
|
|
@ -83,6 +87,7 @@ public class FolderBrowser extends Table {
|
||||||
private static final String SORT_ACTION_DOWN = "sortActionDown";
|
private static final String SORT_ACTION_DOWN = "sortActionDown";
|
||||||
private final static String SORT_KEY_NAME = "name";
|
private final static String SORT_KEY_NAME = "name";
|
||||||
private final static String SORT_KEY_TITLE = "title";
|
private final static String SORT_KEY_TITLE = "title";
|
||||||
|
private final static String SORT_KEY_TYPE = "type";
|
||||||
private final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
|
private final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
|
||||||
private final static String SORT_KEY_CREATION_DATE = "creationDate";
|
private final static String SORT_KEY_CREATION_DATE = "creationDate";
|
||||||
|
|
||||||
|
|
@ -93,10 +98,11 @@ public class FolderBrowser extends Table {
|
||||||
private final TableColumn nameColumn;
|
private final TableColumn nameColumn;
|
||||||
private final TableColumn deleteColumn;
|
private final TableColumn deleteColumn;
|
||||||
// private TableColumn m_indexColumn;
|
// private TableColumn m_indexColumn;
|
||||||
private final StringParameter sortTypeParameter = new StringParameter("sortType");
|
private final StringParameter sortTypeParameter = new StringParameter(
|
||||||
|
"sortType");
|
||||||
private final StringParameter sortDirectionParameter = new StringParameter(
|
private final StringParameter sortDirectionParameter = new StringParameter(
|
||||||
"sortDirn");
|
"sortDirn");
|
||||||
|
|
||||||
private StringParameter atozFilterParameter = null;
|
private StringParameter atozFilterParameter = null;
|
||||||
private StringParameter filterParameter = null;
|
private StringParameter filterParameter = null;
|
||||||
private FolderManipulator folderManipulator;
|
private FolderManipulator folderManipulator;
|
||||||
|
|
@ -114,7 +120,7 @@ public class FolderBrowser extends Table {
|
||||||
setHeader(new TableHeader(getColumnModel()));
|
setHeader(new TableHeader(getColumnModel()));
|
||||||
|
|
||||||
this.folderSelectionModel = folderSelectionModel;
|
this.folderSelectionModel = folderSelectionModel;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* This code should be uncommented if the desired behaviour is for a
|
* This code should be uncommented if the desired behaviour is for a
|
||||||
|
|
@ -216,15 +222,15 @@ public class FolderBrowser extends Table {
|
||||||
public FolderSelectionModel getFolderSelectionModel() {
|
public FolderSelectionModel getFolderSelectionModel() {
|
||||||
return folderSelectionModel;
|
return folderSelectionModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setFolderManipulator(final FolderManipulator folderManipulator) {
|
protected void setFolderManipulator(
|
||||||
|
final FolderManipulator folderManipulator) {
|
||||||
this.folderManipulator = folderManipulator;
|
this.folderManipulator = folderManipulator;
|
||||||
}
|
}
|
||||||
|
|
||||||
// protected void setFilterForm(final FolderManipulator.FilterForm filterForm) {
|
// protected void setFilterForm(final FolderManipulator.FilterForm filterForm) {
|
||||||
// this.filterForm = filterForm;
|
// this.filterForm = filterForm;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
protected void setAtoZfilterParameter(
|
protected void setAtoZfilterParameter(
|
||||||
final StringParameter atozFilterParameter) {
|
final StringParameter atozFilterParameter) {
|
||||||
this.atozFilterParameter = atozFilterParameter;
|
this.atozFilterParameter = atozFilterParameter;
|
||||||
|
|
@ -241,7 +247,7 @@ public class FolderBrowser extends Table {
|
||||||
protected Paginator getPaginator() {
|
protected Paginator getPaginator() {
|
||||||
return paginator;
|
return paginator;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setPaginator(final Paginator paginator) {
|
protected void setPaginator(final Paginator paginator) {
|
||||||
this.paginator = paginator;
|
this.paginator = paginator;
|
||||||
}
|
}
|
||||||
|
|
@ -416,10 +422,12 @@ public class FolderBrowser extends Table {
|
||||||
final int row,
|
final int row,
|
||||||
final int column) {
|
final int column) {
|
||||||
|
|
||||||
final ContentItem item = (ContentItem) value;
|
// final ContentItem item = (ContentItem) value;
|
||||||
final String name = item.getDisplayName();
|
// final String name = item.getDisplayName();
|
||||||
// final ContentSection section = item.getContentType().
|
// final ContentSection section = item.getContentType().
|
||||||
// getContentSection();
|
// getContentSection();
|
||||||
|
final long itemId = (long) key;
|
||||||
|
final String name = (String) value;
|
||||||
final ContentSection section = CMS.getContext().getContentSection();
|
final ContentSection section = CMS.getContext().getContentSection();
|
||||||
final ContentSectionManager sectionManager = CdiUtil.createCdiUtil()
|
final ContentSectionManager sectionManager = CdiUtil.createCdiUtil()
|
||||||
.findBean(ContentSectionManager.class);
|
.findBean(ContentSectionManager.class);
|
||||||
|
|
@ -427,12 +435,18 @@ public class FolderBrowser extends Table {
|
||||||
section);
|
section);
|
||||||
|
|
||||||
return new Link(name,
|
return new Link(name,
|
||||||
itemResolver.generateItemURL(
|
itemResolver.generateItemURL(state,
|
||||||
state,
|
itemId,
|
||||||
item.getObjectId(),
|
name,
|
||||||
name,
|
section,
|
||||||
section,
|
"DRAFT"));
|
||||||
item.getVersion().name()));
|
// return new Link(name,
|
||||||
|
// itemResolver.generateItemURL(
|
||||||
|
// state,
|
||||||
|
// item.getObjectId(),
|
||||||
|
// name,
|
||||||
|
// section,
|
||||||
|
// item.getVersion().name()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -459,42 +473,50 @@ public class FolderBrowser extends Table {
|
||||||
final int row,
|
final int row,
|
||||||
final int column) {
|
final int column) {
|
||||||
|
|
||||||
final ContentItem item = (ContentItem) value;
|
// final ContentItem item = (ContentItem) value;
|
||||||
final String name = item.getDisplayName();
|
// final String name = item.getDisplayName();
|
||||||
|
|
||||||
final SimpleContainer container = new SimpleContainer();
|
final SimpleContainer container = new SimpleContainer();
|
||||||
final ContentSection section = CMS.getContext().getContentSection();
|
final ContentSection section = CMS.getContext().getContentSection();
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final ContentItemManager itemManager = cdiUtil.findBean(
|
// final ContentItemManager itemManager = cdiUtil.findBean(
|
||||||
ContentItemManager.class);
|
// ContentItemManager.class);
|
||||||
final ContentSectionManager sectionManager = cdiUtil.findBean(
|
final ContentSectionManager sectionManager = cdiUtil.findBean(
|
||||||
ContentSectionManager.class);
|
ContentSectionManager.class);
|
||||||
final ItemResolver itemResolver = sectionManager.getItemResolver(
|
final ItemResolver itemResolver = sectionManager.getItemResolver(
|
||||||
section);
|
section);
|
||||||
|
|
||||||
item.getName().getAvailableLocales().stream()
|
// item.getName().getAvailableLocales().stream()
|
||||||
.map((locale) -> locale.toString())
|
// .map((locale) -> locale.toString())
|
||||||
.map((lang) -> {
|
// .map((lang) -> {
|
||||||
final StringBuilder fontWeight = new StringBuilder(2);
|
// final StringBuilder fontWeight = new StringBuilder(2);
|
||||||
final StringBuilder styleClasses = new StringBuilder(20);
|
// final StringBuilder styleClasses = new StringBuilder(20);
|
||||||
if (itemManager.isLive(item)) {
|
// if (itemManager.isLive(item)) {
|
||||||
fontWeight.append(Label.BOLD);
|
// fontWeight.append(Label.BOLD);
|
||||||
styleClasses.append("live ");
|
// styleClasses.append("live ");
|
||||||
}
|
// }
|
||||||
final Label langLabel = new Label(lang);
|
// final Label langLabel = new Label(lang);
|
||||||
langLabel.setFontWeight(fontWeight.toString().trim());
|
// langLabel.setFontWeight(fontWeight.toString().trim());
|
||||||
langLabel.setClassAttr(styleClasses.toString().trim());
|
// langLabel.setClassAttr(styleClasses.toString().trim());
|
||||||
return langLabel;
|
// return langLabel;
|
||||||
})
|
// })
|
||||||
.forEach((langLabel) -> {
|
// .forEach((langLabel) -> {
|
||||||
container.add(new Link(
|
// container.add(new Link(
|
||||||
langLabel,
|
// langLabel,
|
||||||
itemResolver.generateItemURL(state,
|
// itemResolver.generateItemURL(state,
|
||||||
item.getObjectId(),
|
// item.getObjectId(),
|
||||||
name,
|
// name,
|
||||||
section,
|
// section,
|
||||||
item.getVersion().name())));
|
// item.getVersion().name())));
|
||||||
});
|
// });
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final List<Locale> availableLocales = (List<Locale>) value;
|
||||||
|
availableLocales.forEach(locale -> container.add(new Link(
|
||||||
|
new Text(locale.toString()),
|
||||||
|
itemResolver.generateItemURL(state,
|
||||||
|
(long) key,
|
||||||
|
locale.toString(),
|
||||||
|
section,
|
||||||
|
"DRAFT"))));
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
|
|
@ -803,5 +825,4 @@ public class FolderBrowser extends Table {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,19 +20,26 @@ package com.arsdigita.cms.ui.folder;
|
||||||
|
|
||||||
import com.arsdigita.kernel.KernelConfig;
|
import com.arsdigita.kernel.KernelConfig;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.libreccm.configuration.ConfigurationManager;
|
import org.libreccm.configuration.ConfigurationManager;
|
||||||
import org.libreccm.core.CcmObject;
|
import org.libreccm.core.CcmObject;
|
||||||
import org.libreccm.core.CcmObjectRepository;
|
import org.libreccm.core.CcmObjectRepository;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
import org.libreccm.l10n.LocalizedString;
|
import org.libreccm.l10n.LocalizedString;
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.contentsection.ContentItem;
|
import org.librecms.contentsection.ContentItem;
|
||||||
import org.librecms.contentsection.ContentItemL10NManager;
|
import org.librecms.contentsection.ContentItemL10NManager;
|
||||||
|
import org.librecms.contentsection.ContentType;
|
||||||
import org.librecms.contentsection.Folder;
|
import org.librecms.contentsection.Folder;
|
||||||
|
import org.librecms.contenttypes.ContentTypeInfo;
|
||||||
|
import org.librecms.contenttypes.ContentTypesManager;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
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.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -50,6 +57,9 @@ import javax.transaction.Transactional;
|
||||||
@RequestScoped
|
@RequestScoped
|
||||||
public class FolderBrowserController {
|
public class FolderBrowserController {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(
|
||||||
|
FolderBrowserController.class);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private EntityManager entityManager;
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
|
@ -64,6 +74,9 @@ public class FolderBrowserController {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ContentItemL10NManager itemL10NManager;
|
private ContentItemL10NManager itemL10NManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ContentTypesManager typesManager;
|
||||||
|
|
||||||
private Locale defaultLocale;
|
private Locale defaultLocale;
|
||||||
|
|
||||||
|
|
@ -166,6 +179,37 @@ public class FolderBrowserController {
|
||||||
final String filterTerm,
|
final String filterTerm,
|
||||||
final int first,
|
final int first,
|
||||||
final int maxResults) {
|
final int maxResults) {
|
||||||
|
|
||||||
|
Objects.requireNonNull(folder);
|
||||||
|
LOGGER.debug("Trying to find objects in folder {}...",
|
||||||
|
Objects.toString(folder));
|
||||||
|
|
||||||
|
// final TypedQuery<CcmObject> testQuery1 = entityManager.createQuery(
|
||||||
|
// "SELECT f FROM Folder f "
|
||||||
|
// + "WHERE f.parentCategory = :folder "
|
||||||
|
// + "AND LOWER(f.name) LIKE :term",
|
||||||
|
// CcmObject.class);
|
||||||
|
// testQuery1.setParameter("folder", folder);
|
||||||
|
// testQuery1.setParameter("term", filterTerm);
|
||||||
|
// final List<CcmObject> testResult1 = testQuery1.getResultList();
|
||||||
|
// LOGGER.debug("TestResult1: {}",
|
||||||
|
// Objects.toString(testResult1));
|
||||||
|
//
|
||||||
|
// final TypedQuery<CcmObject> testQuery2 = entityManager.createQuery(
|
||||||
|
// "SELECT i FROM ContentItem i JOIN i.categories c "
|
||||||
|
// + "WHERE c.category = :folder "
|
||||||
|
// + "AND c.type = '" + CmsConstants.CATEGORIZATION_TYPE_FOLDER
|
||||||
|
// + "' "
|
||||||
|
// + "AND i.version = "
|
||||||
|
// + "org.librecms.contentsection.ContentItemVersion.DRAFT "
|
||||||
|
// + "AND (LOWER(i.displayName) LIKE LOWER(:term))",
|
||||||
|
// CcmObject.class);
|
||||||
|
// testQuery2.setParameter("folder", folder);
|
||||||
|
// testQuery2.setParameter("term", filterTerm);
|
||||||
|
// final List<CcmObject> testResult2 = testQuery2.getResultList();
|
||||||
|
// LOGGER.debug("TestResult2: {}",
|
||||||
|
// Objects.toString(testResult2));
|
||||||
|
|
||||||
final TypedQuery<CcmObject> query = entityManager.createNamedQuery(
|
final TypedQuery<CcmObject> query = entityManager.createNamedQuery(
|
||||||
"Folder.findObjects", CcmObject.class);
|
"Folder.findObjects", CcmObject.class);
|
||||||
query.setParameter("folder", folder);
|
query.setParameter("folder", folder);
|
||||||
|
|
@ -272,6 +316,10 @@ public class FolderBrowserController {
|
||||||
} else {
|
} else {
|
||||||
row.setTitle(item.getTitle().getValue(defaultLocale));
|
row.setTitle(item.getTitle().getValue(defaultLocale));
|
||||||
}
|
}
|
||||||
|
final ContentType type = item.getContentType();
|
||||||
|
final ContentTypeInfo typeInfo = typesManager.getContentTypeInfo(type);
|
||||||
|
row.setTypeLabelBundle(typeInfo.getLabelBundle());
|
||||||
|
row.setTypeLabelKey(typeInfo.getLabelKey());
|
||||||
} else {
|
} else {
|
||||||
row.setObjectId(object.getObjectId());
|
row.setObjectId(object.getObjectId());
|
||||||
row.setObjectUuid(object.getUuid());
|
row.setObjectUuid(object.getUuid());
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,9 @@
|
||||||
package com.arsdigita.cms.ui.folder;
|
package com.arsdigita.cms.ui.folder;
|
||||||
|
|
||||||
import com.arsdigita.bebop.table.TableModel;
|
import com.arsdigita.bebop.table.TableModel;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -27,9 +30,9 @@ import javax.ws.rs.DELETE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Table model for the {@link FolderBrowser}.
|
* Table model for the {@link FolderBrowser}.
|
||||||
*
|
*
|
||||||
* @see {FolderBrowserTableModelBuilder}
|
* @see {FolderBrowserTableModelBuilder}
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
*/
|
*/
|
||||||
class FolderBrowserTableModel implements TableModel {
|
class FolderBrowserTableModel implements TableModel {
|
||||||
|
|
@ -41,14 +44,14 @@ class FolderBrowserTableModel implements TableModel {
|
||||||
private static final int COL_CREATION_DATE = 4;
|
private static final int COL_CREATION_DATE = 4;
|
||||||
private static final int COL_LAST_MODIFIED = 5;
|
private static final int COL_LAST_MODIFIED = 5;
|
||||||
private static final int COL_DELETEABLE = 6;
|
private static final int COL_DELETEABLE = 6;
|
||||||
|
|
||||||
private final Iterator<FolderBrowserTableRow> iterator;
|
private final Iterator<FolderBrowserTableRow> iterator;
|
||||||
private FolderBrowserTableRow currentRow;
|
private FolderBrowserTableRow currentRow;
|
||||||
|
|
||||||
public FolderBrowserTableModel(final List<FolderBrowserTableRow> rows) {
|
public FolderBrowserTableModel(final List<FolderBrowserTableRow> rows) {
|
||||||
iterator = rows.iterator();
|
iterator = rows.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getColumnCount() {
|
public int getColumnCount() {
|
||||||
return 6;
|
return 6;
|
||||||
|
|
@ -66,7 +69,7 @@ class FolderBrowserTableModel implements TableModel {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getElementAt(final int columnIndex) {
|
public Object getElementAt(final int columnIndex) {
|
||||||
switch(columnIndex) {
|
switch (columnIndex) {
|
||||||
case COL_NAME:
|
case COL_NAME:
|
||||||
return currentRow.getName();
|
return currentRow.getName();
|
||||||
case COL_LANGUAGES:
|
case COL_LANGUAGES:
|
||||||
|
|
@ -74,7 +77,14 @@ class FolderBrowserTableModel implements TableModel {
|
||||||
case COL_TITLE:
|
case COL_TITLE:
|
||||||
return currentRow.getTitle();
|
return currentRow.getTitle();
|
||||||
case COL_TYPE:
|
case COL_TYPE:
|
||||||
return currentRow.getType();
|
final String typeLabelBundle = currentRow.getTypeLabelBundle();
|
||||||
|
final String typeLabelKey = currentRow.getTypeLabelKey();
|
||||||
|
if (typeLabelKey == null) {
|
||||||
|
return new GlobalizedMessage("empty_text",
|
||||||
|
CmsConstants.CMS_BUNDLE);
|
||||||
|
} else {
|
||||||
|
return new GlobalizedMessage(typeLabelKey, typeLabelBundle);
|
||||||
|
}
|
||||||
case COL_CREATION_DATE:
|
case COL_CREATION_DATE:
|
||||||
return currentRow.getCreated();
|
return currentRow.getCreated();
|
||||||
case COL_LAST_MODIFIED:
|
case COL_LAST_MODIFIED:
|
||||||
|
|
@ -91,5 +101,5 @@ class FolderBrowserTableModel implements TableModel {
|
||||||
public Object getKeyAt(final int columnIndex) {
|
public Object getKeyAt(final int columnIndex) {
|
||||||
return currentRow.getObjectId();
|
return currentRow.getObjectId();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ import com.arsdigita.bebop.table.TableModel;
|
||||||
import com.arsdigita.bebop.table.TableModelBuilder;
|
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||||
import com.arsdigita.util.LockableImpl;
|
import com.arsdigita.util.LockableImpl;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.librecms.contentsection.Folder;
|
import org.librecms.contentsection.Folder;
|
||||||
|
|
||||||
|
|
@ -37,6 +39,8 @@ import java.util.List;
|
||||||
class FolderBrowserTableModelBuilder extends LockableImpl
|
class FolderBrowserTableModelBuilder extends LockableImpl
|
||||||
implements TableModelBuilder {
|
implements TableModelBuilder {
|
||||||
|
|
||||||
|
private final static Logger LOGGER = LogManager.getLogger(FolderBrowserTableModelBuilder.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableModel makeModel(final Table table,
|
public TableModel makeModel(final Table table,
|
||||||
final PageState state) {
|
final PageState state) {
|
||||||
|
|
@ -70,14 +74,17 @@ class FolderBrowserTableModelBuilder extends LockableImpl
|
||||||
filterTerm = null;
|
filterTerm = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final long start = System.currentTimeMillis();
|
||||||
|
LOGGER.debug("Retrieving table rows...");
|
||||||
final List<FolderBrowserTableRow> rows;
|
final List<FolderBrowserTableRow> rows;
|
||||||
if (filterTerm == null) {
|
if (filterTerm == null) {
|
||||||
rows = controller.getObjectRows(folder, first, pageSize);
|
rows = controller.getObjectRows(folder, first -1, pageSize);
|
||||||
} else {
|
} else {
|
||||||
rows = controller.getObjectRows(folder, filter, first, pageSize);
|
rows = controller.getObjectRows(folder, filter, first- 1, pageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOGGER.debug("Retrieve table rows in {} ms.",
|
||||||
|
System.currentTimeMillis() - start);
|
||||||
return new FolderBrowserTableModel(rows);
|
return new FolderBrowserTableModel(rows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,13 +30,14 @@ import java.util.Locale;
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
*/
|
*/
|
||||||
class FolderBrowserTableRow {
|
class FolderBrowserTableRow {
|
||||||
|
|
||||||
private long objectId;
|
private long objectId;
|
||||||
private String objectUuid;
|
private String objectUuid;
|
||||||
private String name;
|
private String name;
|
||||||
private List<Locale> languages;
|
private List<Locale> languages;
|
||||||
private String title;
|
private String title;
|
||||||
private String type;
|
private String typeLabelBundle;
|
||||||
|
private String typeLabelKey;
|
||||||
private Date created;
|
private Date created;
|
||||||
private Date lastModified;
|
private Date lastModified;
|
||||||
private boolean deletable;
|
private boolean deletable;
|
||||||
|
|
@ -81,28 +82,52 @@ class FolderBrowserTableRow {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getType() {
|
public String getTypeLabelBundle() {
|
||||||
return type;
|
return typeLabelBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setTypeLabelBundle(final String typeLabelBundle) {
|
||||||
|
this.typeLabelBundle = typeLabelBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTypeLabelKey() {
|
||||||
|
return typeLabelKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setType(final String type) {
|
protected void setTypeLabelKey(final String typeLabelKey) {
|
||||||
this.type = type;
|
this.typeLabelKey = typeLabelKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getCreated() {
|
public Date getCreated() {
|
||||||
return new Date(created.getTime());
|
if (created == null) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return new Date(created.getTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setCreated(final Date created) {
|
protected void setCreated(final Date created) {
|
||||||
this.created = new Date(created.getTime());
|
if (created == null) {
|
||||||
|
this.created = null;
|
||||||
|
} else {
|
||||||
|
this.created = new Date(created.getTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getLastModified() {
|
public Date getLastModified() {
|
||||||
return new Date(lastModified.getTime());
|
if (lastModified == null) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return new Date(lastModified.getTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setLastModified(final Date lastModified) {
|
protected void setLastModified(final Date lastModified) {
|
||||||
this.lastModified = new Date(lastModified.getTime());
|
if (lastModified == null) {
|
||||||
|
this.lastModified = null;
|
||||||
|
} else {
|
||||||
|
this.lastModified = new Date(lastModified.getTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDeletable() {
|
public boolean isDeletable() {
|
||||||
|
|
@ -112,7 +137,5 @@ class FolderBrowserTableRow {
|
||||||
protected void setDeletable(final boolean deletable) {
|
protected void setDeletable(final boolean deletable) {
|
||||||
this.deletable = deletable;
|
this.deletable = deletable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ import com.arsdigita.bebop.Resettable;
|
||||||
import com.arsdigita.bebop.SaveCancelSection;
|
import com.arsdigita.bebop.SaveCancelSection;
|
||||||
import com.arsdigita.bebop.SimpleContainer;
|
import com.arsdigita.bebop.SimpleContainer;
|
||||||
import com.arsdigita.bebop.Table;
|
import com.arsdigita.bebop.Table;
|
||||||
|
import com.arsdigita.bebop.Text;
|
||||||
import com.arsdigita.bebop.Tree;
|
import com.arsdigita.bebop.Tree;
|
||||||
import com.arsdigita.bebop.event.ActionEvent;
|
import com.arsdigita.bebop.event.ActionEvent;
|
||||||
import com.arsdigita.bebop.event.ActionListener;
|
import com.arsdigita.bebop.event.ActionListener;
|
||||||
|
|
@ -110,11 +111,11 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
//public static final String RESOURCE_BUNDLE = "com.arsdigita.cms.ui.folder.CMSFolderResources";
|
//public static final String RESOURCE_BUNDLE = "com.arsdigita.cms.ui.folder.CMSFolderResources";
|
||||||
private static final Logger LOGGER = LogManager.getLogger(
|
private static final Logger LOGGER = LogManager.getLogger(
|
||||||
FolderManipulator.class);
|
FolderManipulator.class);
|
||||||
|
|
||||||
private static final String ATOZ_FILTER_PARAM = "aToZfilter";
|
private static final String ATOZ_FILTER_PARAM = "aToZfilter";
|
||||||
private static final String ACTION_PARAM = "act";
|
private static final String ACTION_PARAM = "act";
|
||||||
private static final String FILTER_PARAM = "filter";
|
private static final String FILTER_PARAM = "filter";
|
||||||
|
|
||||||
private static final String SOURCES_PARAM = "srcs";
|
private static final String SOURCES_PARAM = "srcs";
|
||||||
private static final String MOVE = "Move";
|
private static final String MOVE = "Move";
|
||||||
private static final String COPY = "Copy";
|
private static final String COPY = "Copy";
|
||||||
|
|
@ -139,17 +140,17 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
ATOZ_FILTER_PARAM);
|
ATOZ_FILTER_PARAM);
|
||||||
private final StringParameter filterParam
|
private final StringParameter filterParam
|
||||||
= new StringParameter(FILTER_PARAM);
|
= new StringParameter(FILTER_PARAM);
|
||||||
|
|
||||||
public FolderManipulator(final FolderSelectionModel folderModel) {
|
public FolderManipulator(final FolderSelectionModel folderModel) {
|
||||||
|
|
||||||
super();
|
super();
|
||||||
|
|
||||||
sourceFolderModel = folderModel;
|
sourceFolderModel = folderModel;
|
||||||
itemView = new ItemView();
|
itemView = new ItemView();
|
||||||
itemView.addProcessListener(new ItemViewProcessListener());
|
itemView.addProcessListener(new ItemViewProcessListener());
|
||||||
itemView.addValidationListener(new ItemViewValidationListener());
|
itemView.addValidationListener(new ItemViewValidationListener());
|
||||||
add(itemView);
|
add(itemView);
|
||||||
|
|
||||||
targetSelector.addProcessListener(new TargetSelectorProcessListener());
|
targetSelector.addProcessListener(new TargetSelectorProcessListener());
|
||||||
targetSelector.addValidationListener(
|
targetSelector.addValidationListener(
|
||||||
new TargetSelectorValidationListener());
|
new TargetSelectorValidationListener());
|
||||||
|
|
@ -159,10 +160,10 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
|
|
||||||
//publishDialog.addProcessListener(new PublishDialogProcessListener());
|
//publishDialog.addProcessListener(new PublishDialogProcessListener());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(final Page page) {
|
public void register(final Page page) {
|
||||||
|
|
||||||
super.register(page);
|
super.register(page);
|
||||||
page.setVisibleDefault(targetSelector, false);
|
page.setVisibleDefault(targetSelector, false);
|
||||||
page.setVisibleDefault(filterForm, true);
|
page.setVisibleDefault(filterForm, true);
|
||||||
|
|
@ -170,11 +171,11 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
page.addComponentStateParam(this, actionParam);
|
page.addComponentStateParam(this, actionParam);
|
||||||
page.addComponentStateParam(this, atozFilterParam);
|
page.addComponentStateParam(this, atozFilterParam);
|
||||||
page.addComponentStateParam(this, filterParam);
|
page.addComponentStateParam(this, filterParam);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Long[] getSources(final PageState state) {
|
public final Long[] getSources(final PageState state) {
|
||||||
|
|
||||||
final Long[] result = (Long[]) state.getValue(sourcesParam);
|
final Long[] result = (Long[]) state.getValue(sourcesParam);
|
||||||
|
|
||||||
//Return empty array instead of null.
|
//Return empty array instead of null.
|
||||||
|
|
@ -184,19 +185,19 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final FolderSelectionModel getSourceFolderModel() {
|
public final FolderSelectionModel getSourceFolderModel() {
|
||||||
return sourceFolderModel;
|
return sourceFolderModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Category getTarget(final PageState state) {
|
public final Category getTarget(final PageState state) {
|
||||||
return targetSelector.getTarget(state);
|
return targetSelector.getTarget(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final boolean isMove(final PageState state) {
|
protected final boolean isMove(final PageState state) {
|
||||||
return MOVE.equals(getAction(state));
|
return MOVE.equals(getAction(state));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final boolean isCopy(final PageState state) {
|
protected final boolean isCopy(final PageState state) {
|
||||||
return COPY.equals(getAction(state));
|
return COPY.equals(getAction(state));
|
||||||
}
|
}
|
||||||
|
|
@ -211,18 +212,18 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
private String getAction(final PageState state) {
|
private String getAction(final PageState state) {
|
||||||
return (String) state.getValue(actionParam);
|
return (String) state.getValue(actionParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void moveItems(final Category target,
|
protected void moveItems(final Category target,
|
||||||
final Long[] itemIds) {
|
final Long[] itemIds) {
|
||||||
|
|
||||||
for (Long itemId : itemIds) {
|
for (Long itemId : itemIds) {
|
||||||
|
|
||||||
changeItemParent(itemId, target);
|
changeItemParent(itemId, target);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeItemParent(final Long itemId, final Category newParent) {
|
private void changeItemParent(final Long itemId, final Category newParent) {
|
||||||
|
|
||||||
//ToDo
|
//ToDo
|
||||||
|
|
@ -241,7 +242,7 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
// item.setParent(newParent);
|
// item.setParent(newParent);
|
||||||
// item.save();
|
// item.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void copyItems(final Category target,
|
protected void copyItems(final Category target,
|
||||||
final Long[] itemIds) {
|
final Long[] itemIds) {
|
||||||
|
|
||||||
|
|
@ -423,53 +424,53 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
public final FolderBrowser getBrowser() {
|
public final FolderBrowser getBrowser() {
|
||||||
return itemView.getBrowser();
|
return itemView.getBrowser();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ItemViewProcessListener implements FormProcessListener {
|
private class ItemViewProcessListener implements FormProcessListener {
|
||||||
|
|
||||||
public ItemViewProcessListener() {
|
public ItemViewProcessListener() {
|
||||||
//Nothing
|
//Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event) throws
|
public void process(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
itemView.setVisible(state, false);
|
itemView.setVisible(state, false);
|
||||||
targetSelector.setVisible(state, true);
|
targetSelector.setVisible(state, true);
|
||||||
targetSelector.expose(state);
|
targetSelector.expose(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TargetSelectorProcessListener implements FormProcessListener {
|
private class TargetSelectorProcessListener implements FormProcessListener {
|
||||||
|
|
||||||
public TargetSelectorProcessListener() {
|
public TargetSelectorProcessListener() {
|
||||||
//Nothing
|
//Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event) throws
|
public void process(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
itemView.setVisible(state, true);
|
itemView.setVisible(state, true);
|
||||||
targetSelector.setVisible(state, false);
|
targetSelector.setVisible(state, false);
|
||||||
|
|
||||||
final Category folder = targetSelector.getTarget(state);
|
final Category folder = targetSelector.getTarget(state);
|
||||||
final Long[] itemIds = getSources(state);
|
final Long[] itemIds = getSources(state);
|
||||||
|
|
||||||
if (isCopy(state)) {
|
if (isCopy(state)) {
|
||||||
copyItems(folder, itemIds);
|
copyItems(folder, itemIds);
|
||||||
} else if (isMove(state)) {
|
} else if (isMove(state)) {
|
||||||
moveItems(folder, itemIds);
|
moveItems(folder, itemIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
reset(state);
|
reset(state);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// private class PublishDialogProcessListener implements FormProcessListener {
|
// private class PublishDialogProcessListener implements FormProcessListener {
|
||||||
|
|
@ -499,43 +500,43 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
private class ItemViewValidationListener implements FormValidationListener {
|
private class ItemViewValidationListener implements FormValidationListener {
|
||||||
|
|
||||||
public ItemViewValidationListener() {
|
public ItemViewValidationListener() {
|
||||||
//Nothing
|
//Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate(final FormSectionEvent event) throws
|
public void validate(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final FormData data = event.getFormData();
|
final FormData data = event.getFormData();
|
||||||
|
|
||||||
if (getSources(state).length <= 0) {
|
if (getSources(state).length <= 0) {
|
||||||
data.addError("cms.ui.folder.must_select_item",
|
data.addError("cms.ui.folder.must_select_item",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE);
|
CmsConstants.CMS_FOLDER_BUNDLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TargetSelectorValidationListener implements
|
private class TargetSelectorValidationListener implements
|
||||||
FormValidationListener {
|
FormValidationListener {
|
||||||
|
|
||||||
public TargetSelectorValidationListener() {
|
public TargetSelectorValidationListener() {
|
||||||
//Nothing
|
//Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate(final FormSectionEvent event) throws
|
public void validate(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
if (getSources(state).length <= 0) {
|
if (getSources(state).length <= 0) {
|
||||||
throw new IllegalStateException("No source items specified");
|
throw new IllegalStateException("No source items specified");
|
||||||
}
|
}
|
||||||
|
|
||||||
final Category target = targetSelector.getTarget(state);
|
final Category target = targetSelector.getTarget(state);
|
||||||
final FormData data = event.getFormData();
|
final FormData data = event.getFormData();
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
|
|
@ -545,7 +546,7 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
//If the target is null, we can skip the rest of the checks
|
//If the target is null, we can skip the rest of the checks
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.equals(sourceFolderModel.getSelectedObject(state))) {
|
if (target.equals(sourceFolderModel.getSelectedObject(state))) {
|
||||||
data.addError(new GlobalizedMessage(
|
data.addError(new GlobalizedMessage(
|
||||||
"cms.ui.folder.not_within_same_folder",
|
"cms.ui.folder.not_within_same_folder",
|
||||||
|
|
@ -562,15 +563,15 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
data.addError("cms.ui.folder.no_permission_for_item",
|
data.addError("cms.ui.folder.no_permission_for_item",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE);
|
CmsConstants.CMS_FOLDER_BUNDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Long source : getSources(state)) {
|
for (Long source : getSources(state)) {
|
||||||
|
|
||||||
validateItem(source, target, state, data);
|
validateItem(source, target, state, data);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateItem(final Long itemId,
|
private void validateItem(final Long itemId,
|
||||||
final Category target,
|
final Category target,
|
||||||
final PageState state,
|
final PageState state,
|
||||||
|
|
@ -582,20 +583,20 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
ContentItemManager.class);
|
ContentItemManager.class);
|
||||||
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||||
PermissionChecker.class);
|
PermissionChecker.class);
|
||||||
|
|
||||||
final ContentItem item = itemRepo.findById(itemId).get();
|
final ContentItem item = itemRepo.findById(itemId).get();
|
||||||
final String name = item.getDisplayName();
|
final String name = item.getDisplayName();
|
||||||
|
|
||||||
final long count = itemRepo.countByNameInFolder(target, name);
|
final long count = itemRepo.countByNameInFolder(target, name);
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
// there is an item in the target folder that already has this name
|
// there is an item in the target folder that already has this name
|
||||||
addErrorMessage(data, "cms.ui.folder.item_already_exists", name);
|
addErrorMessage(data, "cms.ui.folder.item_already_exists", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (itemManager.isLive(item) && isMove(state)) {
|
if (itemManager.isLive(item) && isMove(state)) {
|
||||||
addErrorMessage(data, "cms.ui.folder.item_is_live", name);
|
addErrorMessage(data, "cms.ui.folder.item_is_live", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(permissionChecker.isPermitted(
|
if (!(permissionChecker.isPermitted(
|
||||||
ItemPrivileges.DELETE, item))
|
ItemPrivileges.DELETE, item))
|
||||||
&& isMove(state)) {
|
&& isMove(state)) {
|
||||||
|
|
@ -603,9 +604,9 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addErrorMessage(final FormData data,
|
private void addErrorMessage(final FormData data,
|
||||||
final String message,
|
final String message,
|
||||||
final String itemName) {
|
final String itemName) {
|
||||||
|
|
@ -627,31 +628,31 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
// }
|
// }
|
||||||
private class TargetSelectorSubmissionListener implements
|
private class TargetSelectorSubmissionListener implements
|
||||||
FormSubmissionListener {
|
FormSubmissionListener {
|
||||||
|
|
||||||
public TargetSelectorSubmissionListener() {
|
public TargetSelectorSubmissionListener() {
|
||||||
//Nothing
|
//Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitted(final FormSectionEvent event) throws
|
public void submitted(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
if (targetSelector.isCancelled(state)) {
|
if (targetSelector.isCancelled(state)) {
|
||||||
reset(state);
|
reset(state);
|
||||||
throw new FormProcessException(new GlobalizedMessage(
|
throw new FormProcessException(new GlobalizedMessage(
|
||||||
"cms.ui.folder.cancelled",
|
"cms.ui.folder.cancelled",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE));
|
CmsConstants.CMS_FOLDER_BUNDLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset(final PageState state) {
|
public void reset(final PageState state) {
|
||||||
|
|
||||||
itemView.setVisible(state, true);
|
itemView.setVisible(state, true);
|
||||||
itemView.reset(state);
|
itemView.reset(state);
|
||||||
targetSelector.setVisible(state, false);
|
targetSelector.setVisible(state, false);
|
||||||
|
|
@ -661,25 +662,25 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
state.setValue(sourcesParam, null);
|
state.setValue(sourcesParam, null);
|
||||||
//s.setValue(m_aToZfilter, null);
|
//s.setValue(m_aToZfilter, null);
|
||||||
state.setValue(filterParam, null);
|
state.setValue(filterParam, null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The form containing the tree to select the target folder from
|
// The form containing the tree to select the target folder from
|
||||||
private class TargetSelector extends Form implements Resettable {
|
private class TargetSelector extends Form implements Resettable {
|
||||||
|
|
||||||
private final FolderSelectionModel targetModel;
|
private final FolderSelectionModel targetModel;
|
||||||
private final FolderTree folderTree;
|
private final FolderTree folderTree;
|
||||||
private final Submit cancelButton;
|
private final Submit cancelButton;
|
||||||
|
|
||||||
public TargetSelector() {
|
public TargetSelector() {
|
||||||
super("targetSel", new BoxPanel());
|
super("targetSel", new BoxPanel());
|
||||||
setMethod(GET);
|
setMethod(GET);
|
||||||
targetModel = new FolderSelectionModel("target");
|
targetModel = new FolderSelectionModel("target");
|
||||||
folderTree = new FolderTree(targetModel);
|
folderTree = new FolderTree(targetModel);
|
||||||
folderTree.setCellRenderer(new FolderTreeCellRenderer());
|
folderTree.setCellRenderer(new FolderTreeCellRenderer());
|
||||||
|
|
||||||
final Label label = new Label(new PrintListener() {
|
final Label label = new Label(new PrintListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prepare(final PrintEvent event) {
|
public void prepare(final PrintEvent event) {
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
@ -690,9 +691,9 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final CategoryManager categoryManager = cdiUtil.
|
final CategoryManager categoryManager = cdiUtil.
|
||||||
findBean(CategoryManager.class);
|
findBean(CategoryManager.class);
|
||||||
|
|
||||||
if (isMove(state)) {
|
if (isMove(state)) {
|
||||||
|
|
||||||
label.setLabel(new GlobalizedMessage(
|
label.setLabel(new GlobalizedMessage(
|
||||||
"cms.ui.folder.move",
|
"cms.ui.folder.move",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE,
|
CmsConstants.CMS_FOLDER_BUNDLE,
|
||||||
|
|
@ -707,9 +708,9 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
folder)}));
|
folder)}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
label.setOutputEscaping(false);
|
label.setOutputEscaping(false);
|
||||||
add(label);
|
add(label);
|
||||||
add(folderTree);
|
add(folderTree);
|
||||||
|
|
@ -718,7 +719,7 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
cancelButton = saveCancelSection.getCancelButton();
|
cancelButton = saveCancelSection.getCancelButton();
|
||||||
add(saveCancelSection);
|
add(saveCancelSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(final Page page) {
|
public void register(final Page page) {
|
||||||
super.register(page);
|
super.register(page);
|
||||||
|
|
@ -744,7 +745,7 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
// items.close();
|
// items.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset(final PageState state) {
|
public void reset(final PageState state) {
|
||||||
folderTree.clearSelection(state);
|
folderTree.clearSelection(state);
|
||||||
|
|
@ -753,15 +754,15 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
state.setValue(folderTree.getSelectionModel().getStateParameter(),
|
state.setValue(folderTree.getSelectionModel().getStateParameter(),
|
||||||
null);
|
null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Category getTarget(final PageState state) {
|
public Category getTarget(final PageState state) {
|
||||||
return (Category) targetModel.getSelectedObject(state);
|
return (Category) targetModel.getSelectedObject(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCancelled(final PageState state) {
|
public boolean isCancelled(final PageState state) {
|
||||||
return cancelButton.isSelected(state);
|
return cancelButton.isSelected(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//The form which is show for the publish and unpublish action
|
//The form which is show for the publish and unpublish action
|
||||||
|
|
@ -805,26 +806,26 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
// The form containing the browser and the drop down for selecting an
|
// The form containing the browser and the drop down for selecting an
|
||||||
// action
|
// action
|
||||||
private class ItemView extends Form implements Resettable {
|
private class ItemView extends Form implements Resettable {
|
||||||
|
|
||||||
private static final String ITEM_VIEW = "itemView";
|
private static final String ITEM_VIEW = "itemView";
|
||||||
|
|
||||||
private final FolderBrowser folderBrowser;
|
private final FolderBrowser folderBrowser;
|
||||||
private final Paginator paginator;
|
private final Paginator paginator;
|
||||||
private final OptionGroup checkboxGroup;
|
private final OptionGroup checkboxGroup;
|
||||||
private final SingleSelect actionSelect;
|
private final SingleSelect actionSelect;
|
||||||
private final Submit submit;
|
private final Submit submit;
|
||||||
|
|
||||||
public ItemView() {
|
public ItemView() {
|
||||||
|
|
||||||
super(ITEM_VIEW, new SimpleContainer());
|
super(ITEM_VIEW, new SimpleContainer());
|
||||||
setMethod(GET);
|
setMethod(GET);
|
||||||
|
|
||||||
final ActionGroup group = new ActionGroup();
|
final ActionGroup group = new ActionGroup();
|
||||||
add(group);
|
add(group);
|
||||||
|
|
||||||
final GridPanel panel = new GridPanel(1);
|
final GridPanel panel = new GridPanel(1);
|
||||||
group.setSubject(panel);
|
group.setSubject(panel);
|
||||||
|
|
||||||
folderBrowser = new FolderBrowser(sourceFolderModel);
|
folderBrowser = new FolderBrowser(sourceFolderModel);
|
||||||
folderBrowser.setAtoZfilterParameter(atozFilterParam);
|
folderBrowser.setAtoZfilterParameter(atozFilterParam);
|
||||||
folderBrowser.setFilterParameter(filterParam);
|
folderBrowser.setFilterParameter(filterParam);
|
||||||
|
|
@ -836,20 +837,20 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
folderBrowser.setPaginator(paginator);
|
folderBrowser.setPaginator(paginator);
|
||||||
panel.add(paginator);
|
panel.add(paginator);
|
||||||
panel.add(folderBrowser);
|
panel.add(folderBrowser);
|
||||||
|
|
||||||
LOGGER.debug("Adding filter form...");
|
LOGGER.debug("Adding filter form...");
|
||||||
filterForm = new FilterForm(new FolderBrowserFilterFormModelBuilder(
|
filterForm = new FilterForm(new FolderBrowserFilterFormModelBuilder(
|
||||||
folderBrowser));
|
folderBrowser));
|
||||||
FolderManipulator.this.add(filterForm);
|
FolderManipulator.this.add(filterForm);
|
||||||
|
|
||||||
checkboxGroup = new CheckboxGroup(sourcesParam);
|
checkboxGroup = new CheckboxGroup(sourcesParam);
|
||||||
panel.add(checkboxGroup);
|
panel.add(checkboxGroup);
|
||||||
|
|
||||||
panel.add(new FormErrorDisplay(this));
|
panel.add(new FormErrorDisplay(this));
|
||||||
|
|
||||||
final Container container = new SimpleContainer();
|
final Container container = new SimpleContainer();
|
||||||
group.addAction(container);
|
group.addAction(container);
|
||||||
|
|
||||||
container.add(new Label(new GlobalizedMessage(
|
container.add(new Label(new GlobalizedMessage(
|
||||||
"cms.ui.folder.edit_selection",
|
"cms.ui.folder.edit_selection",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE)));
|
CmsConstants.CMS_FOLDER_BUNDLE)));
|
||||||
|
|
@ -882,21 +883,23 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
|
|
||||||
// Add a new first column to the table
|
// Add a new first column to the table
|
||||||
final TableColumn column = new TableColumn();
|
final TableColumn column = new TableColumn();
|
||||||
|
column.setHeaderValue(new GlobalizedMessage("empty_text",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
column.setCellRenderer(new CheckboxRenderer());
|
column.setCellRenderer(new CheckboxRenderer());
|
||||||
folderBrowser.getColumnModel().add(0, column);
|
folderBrowser.getColumnModel().add(0, column);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final FolderBrowser getBrowser() {
|
public final FolderBrowser getBrowser() {
|
||||||
return folderBrowser;
|
return folderBrowser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Paginator getPaginator() {
|
public Paginator getPaginator() {
|
||||||
return paginator;
|
return paginator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset(final PageState state) {
|
public void reset(final PageState state) {
|
||||||
|
|
||||||
checkboxGroup.setValue(state, null);
|
checkboxGroup.setValue(state, null);
|
||||||
actionSelect.setValue(state, null);
|
actionSelect.setValue(state, null);
|
||||||
paginator.reset(state);
|
paginator.reset(state);
|
||||||
|
|
@ -907,11 +910,11 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
|
|
||||||
// The renderer for the first column in the itemView table
|
// The renderer for the first column in the itemView table
|
||||||
private class CheckboxRenderer implements TableCellRenderer {
|
private class CheckboxRenderer implements TableCellRenderer {
|
||||||
|
|
||||||
public CheckboxRenderer() {
|
public CheckboxRenderer() {
|
||||||
//Nothing to do
|
//Nothing to do
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getComponent(final Table table,
|
public Component getComponent(final Table table,
|
||||||
final PageState state,
|
final PageState state,
|
||||||
|
|
@ -920,50 +923,49 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
final Object key,
|
final Object key,
|
||||||
final int row,
|
final int row,
|
||||||
final int column) {
|
final int column) {
|
||||||
final BigDecimal n = (BigDecimal) key;
|
final Option result = new Option(key.toString(),
|
||||||
Option result = new Option(sourcesParam.marshalElement(n.abs()),
|
new Text(""));
|
||||||
"");
|
|
||||||
result.setGroup(checkboxGroup);
|
result.setGroup(checkboxGroup);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class FilterForm extends Form implements FormProcessListener,
|
protected class FilterForm extends Form implements FormProcessListener,
|
||||||
FormInitListener,
|
FormInitListener,
|
||||||
FormSubmissionListener {
|
FormSubmissionListener {
|
||||||
|
|
||||||
private final SimpleContainer panel;
|
private final SimpleContainer panel;
|
||||||
private boolean visible;
|
private boolean visible;
|
||||||
private final FilterFormModelBuilder modelBuilder;
|
private final FilterFormModelBuilder modelBuilder;
|
||||||
private final TextField filterField;
|
private final TextField filterField;
|
||||||
|
|
||||||
public FilterForm(final FilterFormModelBuilder modelBuilder) {
|
public FilterForm(final FilterFormModelBuilder modelBuilder) {
|
||||||
super("folderFilterForm");
|
super("folderFilterForm");
|
||||||
|
|
||||||
LOGGER.debug("Creating filter form...");
|
LOGGER.debug("Creating filter form...");
|
||||||
|
|
||||||
this.modelBuilder = modelBuilder;
|
this.modelBuilder = modelBuilder;
|
||||||
|
|
||||||
addProcessListener(this);
|
addProcessListener(this);
|
||||||
addInitListener(this);
|
addInitListener(this);
|
||||||
addSubmissionListener(this);
|
addSubmissionListener(this);
|
||||||
|
|
||||||
panel = new BoxPanel(BoxPanel.HORIZONTAL);
|
panel = new BoxPanel(BoxPanel.HORIZONTAL);
|
||||||
|
|
||||||
final ActionLink allLink = new ActionLink(
|
final ActionLink allLink = new ActionLink(
|
||||||
new GlobalizedMessage("cms.ui.folder.filter.all",
|
new GlobalizedMessage("cms.ui.folder.filter.all",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE));
|
CmsConstants.CMS_FOLDER_BUNDLE));
|
||||||
allLink.addActionListener(new ActionListener() {
|
allLink.addActionListener(new ActionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(final ActionEvent event) {
|
public void actionPerformed(final ActionEvent event) {
|
||||||
//event.getPageState().setValue(m_aToZfilter, "");
|
//event.getPageState().setValue(m_aToZfilter, "");
|
||||||
event.getPageState().setValue(filterParam, "");
|
event.getPageState().setValue(filterParam, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
panel.add(allLink);
|
panel.add(allLink);
|
||||||
|
|
||||||
|
|
@ -989,33 +991,33 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
new GlobalizedMessage(
|
new GlobalizedMessage(
|
||||||
"cms.ui.folder.filter_do",
|
"cms.ui.folder.filter_do",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE)));
|
CmsConstants.CMS_FOLDER_BUNDLE)));
|
||||||
|
|
||||||
add(panel);
|
add(panel);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextField getFilterField() {
|
public TextField getFilterField() {
|
||||||
return filterField;
|
return filterField;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event) throws
|
public void process(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
//Nothing
|
//Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(final FormSectionEvent event) throws
|
public void init(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
//fse.getPageState().setValue(FolderManipulator.this.m_filter, null);
|
//fse.getPageState().setValue(FolderManipulator.this.m_filter, null);
|
||||||
//filterField.setValue(fse.getPageState(), null);
|
//filterField.setValue(fse.getPageState(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitted(final FormSectionEvent event) throws
|
public void submitted(final FormSectionEvent event) throws
|
||||||
FormProcessException {
|
FormProcessException {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isVisible(PageState state) {
|
public boolean isVisible(PageState state) {
|
||||||
if (super.isVisible(state)
|
if (super.isVisible(state)
|
||||||
|
|
@ -1027,13 +1029,13 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected interface FilterFormModelBuilder {
|
protected interface FilterFormModelBuilder {
|
||||||
|
|
||||||
public long getFolderSize(PageState state);
|
public long getFolderSize(PageState state);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1051,7 +1053,7 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
// return new GlobalizedMessage(key, RESOURCE_BUNDLE, args);
|
// return new GlobalizedMessage(key, RESOURCE_BUNDLE, args);
|
||||||
// }
|
// }
|
||||||
private class FolderTreeCellRenderer implements TreeCellRenderer {
|
private class FolderTreeCellRenderer implements TreeCellRenderer {
|
||||||
|
|
||||||
private RequestLocal m_invalidFolders = new RequestLocal();
|
private RequestLocal m_invalidFolders = new RequestLocal();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1119,7 +1121,7 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
// m_invalidFolders.set(state, invalidFolders);
|
// m_invalidFolders.set(state, invalidFolders);
|
||||||
// }
|
// }
|
||||||
final Label label = new Label(value.toString());
|
final Label label = new Label(value.toString());
|
||||||
|
|
||||||
if (invalidFolders.contains(key.toString())) {
|
if (invalidFolders.contains(key.toString())) {
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
@ -1129,10 +1131,10 @@ public class FolderManipulator extends SimpleContainer implements
|
||||||
label.setFontWeight(Label.BOLD);
|
label.setFontWeight(Label.BOLD);
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ControlLink(label);
|
return new ControlLink(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import com.arsdigita.bebop.tree.TreeModel;
|
||||||
import com.arsdigita.bebop.tree.TreeModelBuilder;
|
import com.arsdigita.bebop.tree.TreeModelBuilder;
|
||||||
import com.arsdigita.bebop.tree.TreeNode;
|
import com.arsdigita.bebop.tree.TreeNode;
|
||||||
import com.arsdigita.cms.CMS;
|
import com.arsdigita.cms.CMS;
|
||||||
|
import com.arsdigita.ui.admin.applications.ApplicationInstanceTreeNode;
|
||||||
|
|
||||||
import org.librecms.contentsection.ContentSection;
|
import org.librecms.contentsection.ContentSection;
|
||||||
|
|
||||||
|
|
@ -35,6 +36,9 @@ import java.util.Iterator;
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.librecms.contentsection.Folder;
|
import org.librecms.contentsection.Folder;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link com.arsdigita.bebop.tree.TreeModelBuilder} that produces trees
|
* A {@link com.arsdigita.bebop.tree.TreeModelBuilder} that produces trees
|
||||||
* containing the folder structure underneath a root folder. The root folder can
|
* containing the folder structure underneath a root folder. The root folder can
|
||||||
|
|
@ -77,7 +81,7 @@ public class FolderTreeModelBuilder extends LockableImpl
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<Folder> getChildren(final TreeNode node,
|
public Iterator<TreeNode> getChildren(final TreeNode node,
|
||||||
final PageState state) {
|
final PageState state) {
|
||||||
final String nodeKey = node.getKey().toString();
|
final String nodeKey = node.getKey().toString();
|
||||||
|
|
||||||
|
|
@ -95,10 +99,21 @@ public class FolderTreeModelBuilder extends LockableImpl
|
||||||
final FolderTreeModelController controller = cdiUtil.findBean(
|
final FolderTreeModelController controller = cdiUtil.findBean(
|
||||||
FolderTreeModelController.class);
|
FolderTreeModelController.class);
|
||||||
|
|
||||||
return controller.getChildren(node);
|
final List<Folder> subFolders = controller.getChildren(node);
|
||||||
|
return subFolders.stream()
|
||||||
|
.map(folder -> generateTreeNode(folder))
|
||||||
|
.collect(Collectors.toList())
|
||||||
|
.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TreeNode generateTreeNode(final Folder folder) {
|
||||||
|
final FolderTreeNode node = new FolderTreeNode(folder);
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*return new DataQueryTreeModel(getRoot(state).getID(),
|
/*return new DataQueryTreeModel(getRoot(state).getID(),
|
||||||
"com.arsdigita.cms.getRootFolder",
|
"com.arsdigita.cms.getRootFolder",
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import org.librecms.contentsection.Folder;
|
||||||
import org.librecms.contentsection.FolderRepository;
|
import org.librecms.contentsection.FolderRepository;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import javax.enterprise.context.RequestScoped;
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
|
@ -62,12 +63,12 @@ public class FolderTreeModelController {
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public boolean hasChildren(final TreeNode node) {
|
public boolean hasChildren(final TreeNode node) {
|
||||||
return getCurrentFolder(node).getSubCategories().isEmpty();
|
return !getCurrentFolder(node).getSubCategories().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public Iterator<Folder> getChildren(final TreeNode node) {
|
public List<Folder> getChildren(final TreeNode node) {
|
||||||
return getCurrentFolder(node).getSubFolders().iterator();
|
return getCurrentFolder(node).getSubFolders();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,8 @@ import javax.persistence.TemporalType;
|
||||||
|
|
||||||
import org.hibernate.search.annotations.IndexedEmbedded;
|
import org.hibernate.search.annotations.IndexedEmbedded;
|
||||||
|
|
||||||
|
import javax.persistence.FetchType;
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.CmsConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -187,7 +189,7 @@ public class ContentItem extends CcmObject implements Serializable {
|
||||||
/**
|
/**
|
||||||
* The content type associated with the content item.
|
* The content type associated with the content item.
|
||||||
*/
|
*/
|
||||||
@OneToOne
|
@OneToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "CONTENT_TYPE_ID")
|
@JoinColumn(name = "CONTENT_TYPE_ID")
|
||||||
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
|
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
|
||||||
// @Field
|
// @Field
|
||||||
|
|
@ -245,15 +247,15 @@ public class ContentItem extends CcmObject implements Serializable {
|
||||||
@Column(name = "ANCESTORS", length = 1024)
|
@Column(name = "ANCESTORS", length = 1024)
|
||||||
private String ancestors;
|
private String ancestors;
|
||||||
|
|
||||||
@OneToMany(mappedBy = "item")
|
@OneToMany(mappedBy = "item", fetch = FetchType.LAZY)
|
||||||
private List<AttachmentList> attachments;
|
private List<AttachmentList> attachments;
|
||||||
|
|
||||||
@OneToOne
|
@OneToOne()
|
||||||
@JoinColumn(name = "LIFECYCLE_ID")
|
@JoinColumn(name = "LIFECYCLE_ID")
|
||||||
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
|
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
|
||||||
private Lifecycle lifecycle;
|
private Lifecycle lifecycle;
|
||||||
|
|
||||||
@OneToOne
|
@OneToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "WORKFLOW_ID")
|
@JoinColumn(name = "WORKFLOW_ID")
|
||||||
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
|
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
|
||||||
private Workflow workflow;
|
private Workflow workflow;
|
||||||
|
|
@ -379,7 +381,7 @@ public class ContentItem extends CcmObject implements Serializable {
|
||||||
int hash = super.hashCode();
|
int hash = super.hashCode();
|
||||||
hash = 59 * hash + Objects.hashCode(itemUuid);
|
hash = 59 * hash + Objects.hashCode(itemUuid);
|
||||||
hash = 59 * hash + Objects.hashCode(name);
|
hash = 59 * hash + Objects.hashCode(name);
|
||||||
hash = 59 * hash + Objects.hashCode(contentType);
|
// hash = 59 * hash + Objects.hashCode(contentType);
|
||||||
hash = 59 * hash + Objects.hashCode(title);
|
hash = 59 * hash + Objects.hashCode(title);
|
||||||
hash = 59 * hash + Objects.hashCode(description);
|
hash = 59 * hash + Objects.hashCode(description);
|
||||||
hash = 59 * hash + Objects.hashCode(version);
|
hash = 59 * hash + Objects.hashCode(version);
|
||||||
|
|
@ -415,9 +417,9 @@ public class ContentItem extends CcmObject implements Serializable {
|
||||||
if (!Objects.equals(name, other.getName())) {
|
if (!Objects.equals(name, other.getName())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!Objects.equals(contentType, other.getContentType())) {
|
// if (!Objects.equals(contentType, other.getContentType())) {
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
if (!Objects.equals(title, other.getTitle())) {
|
if (!Objects.equals(title, other.getTitle())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -445,7 +447,7 @@ public class ContentItem extends CcmObject implements Serializable {
|
||||||
public String toString(final String data) {
|
public String toString(final String data) {
|
||||||
return super.toString(String.format(", itemUuid = %s, "
|
return super.toString(String.format(", itemUuid = %s, "
|
||||||
+ "name = %s, "
|
+ "name = %s, "
|
||||||
+ "contentType = { %s }, "
|
// + "contentType = { %s }, "
|
||||||
+ "title = %s, "
|
+ "title = %s, "
|
||||||
+ "description = %s, "
|
+ "description = %s, "
|
||||||
+ "version = %s, "
|
+ "version = %s, "
|
||||||
|
|
@ -455,7 +457,7 @@ public class ContentItem extends CcmObject implements Serializable {
|
||||||
+ "%s",
|
+ "%s",
|
||||||
itemUuid,
|
itemUuid,
|
||||||
Objects.toString(name),
|
Objects.toString(name),
|
||||||
Objects.toString(contentType),
|
// Objects.toString(contentType),
|
||||||
Objects.toString(title),
|
Objects.toString(title),
|
||||||
Objects.toString(description),
|
Objects.toString(description),
|
||||||
Objects.toString(version),
|
Objects.toString(version),
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ import javax.persistence.Embedded;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.EnumType;
|
import javax.persistence.EnumType;
|
||||||
import javax.persistence.Enumerated;
|
import javax.persistence.Enumerated;
|
||||||
|
import javax.persistence.FetchType;
|
||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.JoinTable;
|
import javax.persistence.JoinTable;
|
||||||
import javax.persistence.ManyToOne;
|
import javax.persistence.ManyToOne;
|
||||||
|
|
@ -76,7 +77,7 @@ public class ContentType extends CcmObject implements Serializable {
|
||||||
@Column(name = "CONTENT_ITEM_CLASS", length = 1024)
|
@Column(name = "CONTENT_ITEM_CLASS", length = 1024)
|
||||||
private String contentItemClass;
|
private String contentItemClass;
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "CONTENT_SECTION_ID")
|
@JoinColumn(name = "CONTENT_SECTION_ID")
|
||||||
private ContentSection contentSection;
|
private ContentSection contentSection;
|
||||||
|
|
||||||
|
|
@ -110,11 +111,11 @@ public class ContentType extends CcmObject implements Serializable {
|
||||||
@Enumerated(EnumType.STRING)
|
@Enumerated(EnumType.STRING)
|
||||||
private ContentTypeMode mode;
|
private ContentTypeMode mode;
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "DEFAULT_LIFECYCLE_ID")
|
@JoinColumn(name = "DEFAULT_LIFECYCLE_ID")
|
||||||
private LifecycleDefinition defaultLifecycle;
|
private LifecycleDefinition defaultLifecycle;
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "DEFAULT_WORKFLOW")
|
@JoinColumn(name = "DEFAULT_WORKFLOW")
|
||||||
private WorkflowTemplate defaultWorkflow;
|
private WorkflowTemplate defaultWorkflow;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,14 +24,11 @@ import javax.persistence.OneToOne;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
import org.libreccm.categorization.Category;
|
import org.libreccm.categorization.Category;
|
||||||
import org.libreccm.core.CcmObject;
|
|
||||||
import org.librecms.CmsConstants;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
|
|
|
||||||
|
|
@ -117,3 +117,4 @@ cms.ui.new_folder=Create new folder
|
||||||
cms.ui.edit_folder=Rename the current folder
|
cms.ui.edit_folder=Rename the current folder
|
||||||
cms.ui.authoring.create_new=Create new
|
cms.ui.authoring.create_new=Create new
|
||||||
cms.ui.authoring.go=Go
|
cms.ui.authoring.go=Go
|
||||||
|
empty_text=
|
||||||
|
|
|
||||||
|
|
@ -116,3 +116,4 @@ cms.ui.new_folder=Neuen Ordner erstellen
|
||||||
cms.ui.edit_folder=Aktuellen Ordner umbenennen
|
cms.ui.edit_folder=Aktuellen Ordner umbenennen
|
||||||
cms.ui.authoring.create_new=Neuer Inhalt
|
cms.ui.authoring.create_new=Neuer Inhalt
|
||||||
cms.ui.authoring.go=Anlegen
|
cms.ui.authoring.go=Anlegen
|
||||||
|
empty_text=
|
||||||
|
|
|
||||||
|
|
@ -85,3 +85,4 @@ cms.ui.new_folder=Create new folder
|
||||||
cms.ui.edit_folder=Rename the current folder
|
cms.ui.edit_folder=Rename the current folder
|
||||||
cms.ui.authoring.create_new=Create new
|
cms.ui.authoring.create_new=Create new
|
||||||
cms.ui.authoring.go=Go
|
cms.ui.authoring.go=Go
|
||||||
|
empty_text=
|
||||||
|
|
|
||||||
|
|
@ -48,5 +48,5 @@ public interface TreeModel {
|
||||||
* Check whether a given node has children, passing
|
* Check whether a given node has children, passing
|
||||||
* in PageState for permissioning purposes
|
* in PageState for permissioning purposes
|
||||||
*/
|
*/
|
||||||
Iterator getChildren(TreeNode n, PageState data);
|
Iterator<TreeNode> getChildren(TreeNode n, PageState data);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,14 @@ public class CcmObjectSelectionModel<T extends CcmObject>
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long getSelectedKey(final PageState state) {
|
public Long getSelectedKey(final PageState state) {
|
||||||
return model.getSelectedKey(state);
|
final Object key = model.getSelectedKey(state);
|
||||||
|
if (key instanceof Long) {
|
||||||
|
return (Long) key;
|
||||||
|
} else if(key instanceof String) {
|
||||||
|
return Long.parseLong((String) key);
|
||||||
|
} else {
|
||||||
|
return Long.parseLong(key.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -51,10 +51,10 @@ public class RoleMembershipMarshaller extends AbstractMarshaller<RoleMembership>
|
||||||
protected void insertIntoDb(RoleMembership portableObject) {
|
protected void insertIntoDb(RoleMembership portableObject) {
|
||||||
|
|
||||||
// if (portableObject.getMembershipId() == 0) {
|
// if (portableObject.getMembershipId() == 0) {
|
||||||
// portableObject.setMembershipId(0);
|
portableObject.setMembershipId(0);
|
||||||
portableObject.setMembershipId(portableObject.getMembershipId() * -1);
|
// portableObject.setMembershipId(portableObject.getMembershipId() * -1);
|
||||||
// entityManager.persist(portableObject);
|
entityManager.persist(portableObject);
|
||||||
entityManager.merge(portableObject);
|
// entityManager.merge(portableObject);
|
||||||
entityManager.flush();
|
entityManager.flush();
|
||||||
LOGGER.debug("Saved RoleMembership with id {}.",
|
LOGGER.debug("Saved RoleMembership with id {}.",
|
||||||
portableObject.getMembershipId());
|
portableObject.getMembershipId());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue