CCM NG/ccm-cms: AssetPane, creation of assets.
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4662 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
dc1ec63e51
commit
6339c2bb08
|
|
@ -22,7 +22,10 @@
|
||||||
<Logger name="org.hibernate.type.descriptor.sql"
|
<Logger name="org.hibernate.type.descriptor.sql"
|
||||||
level="trace">
|
level="trace">
|
||||||
</Logger>-->
|
</Logger>-->
|
||||||
|
<Logger name="com.arsdigita.cms.ui.assets.AssetFolderBrowserController"
|
||||||
|
level="debug">
|
||||||
|
|
||||||
|
</Logger>
|
||||||
<Logger name="com.arsdigita.cms.ui.folder.FolderBrowserTableModelBuilder"
|
<Logger name="com.arsdigita.cms.ui.folder.FolderBrowserTableModelBuilder"
|
||||||
level="debug">
|
level="debug">
|
||||||
</Logger>
|
</Logger>
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ 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.SimpleContainer;
|
||||||
|
import com.arsdigita.bebop.SingleSelectionModel;
|
||||||
import com.arsdigita.bebop.Table;
|
import com.arsdigita.bebop.Table;
|
||||||
import com.arsdigita.bebop.Text;
|
import com.arsdigita.bebop.Text;
|
||||||
import com.arsdigita.bebop.event.TableActionAdapter;
|
import com.arsdigita.bebop.event.TableActionAdapter;
|
||||||
|
|
@ -64,25 +65,25 @@ public class AssetFolderBrowser extends Table {
|
||||||
protected final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
|
protected final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
|
||||||
protected final static String SORT_KEY_CREATION_DATE = "creationDate";
|
protected final static String SORT_KEY_CREATION_DATE = "creationDate";
|
||||||
|
|
||||||
private final FolderSelectionModel folderSelectionModel;
|
private final AssetPane assetPane;
|
||||||
private TableActionListener folderChanger;
|
private TableActionListener folderChanger;
|
||||||
private TableActionListener folderDeleter;
|
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(
|
||||||
"sortType");
|
"sortType");
|
||||||
private final StringParameter sortDirectionParameter = new StringParameter(
|
private final StringParameter sortDirectionParameter = new StringParameter(
|
||||||
"sortDir");
|
"sortDir");
|
||||||
|
|
||||||
private Paginator paginator;
|
private Paginator paginator;
|
||||||
private long folderSize;
|
private long folderSize;
|
||||||
|
|
||||||
public AssetFolderBrowser(final FolderSelectionModel folderSelectionModel) {
|
public AssetFolderBrowser(final AssetPane assetPane) {
|
||||||
super();
|
super();
|
||||||
sortTypeParameter.setDefaultValue(SORT_KEY_NAME);
|
sortTypeParameter.setDefaultValue(SORT_KEY_NAME);
|
||||||
sortDirectionParameter.setDefaultValue(SORT_ACTION_UP);
|
sortDirectionParameter.setDefaultValue(SORT_ACTION_UP);
|
||||||
|
|
||||||
this.folderSelectionModel = folderSelectionModel;
|
this.assetPane = assetPane;
|
||||||
|
|
||||||
initComponents();
|
initComponents();
|
||||||
}
|
}
|
||||||
|
|
@ -105,24 +106,23 @@ public class AssetFolderBrowser extends Table {
|
||||||
setClassAttr("dataTable");
|
setClassAttr("dataTable");
|
||||||
|
|
||||||
getHeader().setDefaultRenderer(
|
getHeader().setDefaultRenderer(
|
||||||
new com.arsdigita.cms.ui.util.DefaultTableCellRenderer());
|
new com.arsdigita.cms.ui.util.DefaultTableCellRenderer());
|
||||||
|
|
||||||
nameColumn = getColumn(AssetFolderBrowserTableModel.COL_NAME);
|
nameColumn = getColumn(AssetFolderBrowserTableModel.COL_NAME);
|
||||||
nameColumn.setCellRenderer(new NameCellRenderer());
|
nameColumn.setCellRenderer(new NameCellRenderer());
|
||||||
nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME));
|
nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME));
|
||||||
|
|
||||||
|
|
||||||
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
|
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
|
||||||
.setHeaderRenderer(
|
.setHeaderRenderer(
|
||||||
new HeaderCellRenderer(SORT_KEY_CREATION_DATE));
|
new HeaderCellRenderer(SORT_KEY_CREATION_DATE));
|
||||||
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
|
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
|
||||||
.setCellRenderer(new DateCellRenderer());
|
.setCellRenderer(new DateCellRenderer());
|
||||||
|
|
||||||
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
|
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
|
||||||
.setHeaderRenderer(new HeaderCellRenderer(
|
.setHeaderRenderer(new HeaderCellRenderer(
|
||||||
SORT_KEY_LAST_MODIFIED_DATE));
|
SORT_KEY_LAST_MODIFIED_DATE));
|
||||||
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
|
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
|
||||||
.setCellRenderer(new DateCellRenderer());
|
.setCellRenderer(new DateCellRenderer());
|
||||||
|
|
||||||
deleteColumn = getColumn(AssetFolderBrowserTableModel.COL_DELETEABLE);
|
deleteColumn = getColumn(AssetFolderBrowserTableModel.COL_DELETEABLE);
|
||||||
deleteColumn.setCellRenderer(new ActionCellRenderer());
|
deleteColumn.setCellRenderer(new ActionCellRenderer());
|
||||||
|
|
@ -142,14 +142,19 @@ public class AssetFolderBrowser extends Table {
|
||||||
|
|
||||||
super.register(page);
|
super.register(page);
|
||||||
|
|
||||||
page.addComponentStateParam(this, folderSelectionModel.
|
page.addComponentStateParam(
|
||||||
getStateParameter());
|
this,
|
||||||
|
getFolderSelectionModel().getStateParameter());
|
||||||
page.addComponentStateParam(this, sortTypeParameter);
|
page.addComponentStateParam(this, sortTypeParameter);
|
||||||
page.addComponentStateParam(this, sortDirectionParameter);
|
page.addComponentStateParam(this, sortDirectionParameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FolderSelectionModel getFolderSelectionModel() {
|
protected FolderSelectionModel getFolderSelectionModel() {
|
||||||
return folderSelectionModel;
|
return assetPane.getFolderSelectionModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SingleSelectionModel<Long> getSelectedAssetModel() {
|
||||||
|
return assetPane.getSelectedAssetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Paginator getPaginator() {
|
protected Paginator getPaginator() {
|
||||||
|
|
@ -200,7 +205,7 @@ public class AssetFolderBrowser extends Table {
|
||||||
final String sortKey = (String) state.getValue(sortTypeParameter);
|
final String sortKey = (String) state.getValue(sortTypeParameter);
|
||||||
final boolean isCurrentKey = sortKey.equals(key);
|
final boolean isCurrentKey = sortKey.equals(key);
|
||||||
final String currentSortDirection = (String) state
|
final String currentSortDirection = (String) state
|
||||||
.getValue(sortDirectionParameter);
|
.getValue(sortDirectionParameter);
|
||||||
final String imageUrlStub;
|
final String imageUrlStub;
|
||||||
|
|
||||||
if (SORT_ACTION_UP.equals(currentSortDirection)) {
|
if (SORT_ACTION_UP.equals(currentSortDirection)) {
|
||||||
|
|
@ -217,7 +222,7 @@ public class AssetFolderBrowser extends Table {
|
||||||
// by default, everything sorts "up" unless it
|
// by default, everything sorts "up" unless it
|
||||||
// is the current key and it is already pointing up
|
// is the current key and it is already pointing up
|
||||||
if (SORT_ACTION_UP.equals(currentSortDirection)
|
if (SORT_ACTION_UP.equals(currentSortDirection)
|
||||||
&& isCurrentKey) {
|
&& isCurrentKey) {
|
||||||
sortDirectionAction = SORT_ACTION_DOWN;
|
sortDirectionAction = SORT_ACTION_DOWN;
|
||||||
} else {
|
} else {
|
||||||
sortDirectionAction = SORT_ACTION_UP;
|
sortDirectionAction = SORT_ACTION_UP;
|
||||||
|
|
@ -268,14 +273,14 @@ public class AssetFolderBrowser extends Table {
|
||||||
|
|
||||||
final String name = (String) value;
|
final String name = (String) value;
|
||||||
final ContentSection section = CMS.getContext().
|
final ContentSection section = CMS.getContext().
|
||||||
getContentSection();
|
getContentSection();
|
||||||
final ContentSectionManager sectionManager = CdiUtil.
|
final ContentSectionManager sectionManager = CdiUtil.
|
||||||
createCdiUtil()
|
createCdiUtil()
|
||||||
.findBean(ContentSectionManager.class);
|
.findBean(ContentSectionManager.class);
|
||||||
|
|
||||||
final boolean isFolder = ((AssetFolderBrowserTableModel) table
|
final boolean isFolder = ((AssetFolderBrowserTableModel) table
|
||||||
.getTableModel(state))
|
.getTableModel(state))
|
||||||
.isFolder();
|
.isFolder();
|
||||||
final long objectId = getObjectId(key);
|
final long objectId = getObjectId(key);
|
||||||
|
|
||||||
if (isFolder) {
|
if (isFolder) {
|
||||||
|
|
@ -288,13 +293,14 @@ public class AssetFolderBrowser extends Table {
|
||||||
row,
|
row,
|
||||||
column);
|
column);
|
||||||
} else {
|
} else {
|
||||||
|
return new ControlLink(new Text(name));
|
||||||
|
|
||||||
// return new Link(new Text(name),
|
// return new Link(new Text(name),
|
||||||
// itemResolver.generateItemURL(state,
|
// itemResolver.generateItemURL(state,
|
||||||
// objectId,
|
// objectId,
|
||||||
// name,
|
// name,
|
||||||
// section,
|
// section,
|
||||||
// "DRAFT"));
|
// "DRAFT"));
|
||||||
return new Text(name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -339,13 +345,13 @@ public class AssetFolderBrowser extends Table {
|
||||||
return new Label(" ", false);
|
return new Label(" ", false);
|
||||||
} else {
|
} else {
|
||||||
final ControlLink link = new ControlLink(
|
final ControlLink link = new ControlLink(
|
||||||
new Label(
|
new Label(
|
||||||
new GlobalizedMessage("cms.ui.folder.delete",
|
new GlobalizedMessage("cms.ui.folder.delete",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE)));
|
CmsConstants.CMS_FOLDER_BUNDLE)));
|
||||||
link.setConfirmation(
|
link.setConfirmation(
|
||||||
new GlobalizedMessage(
|
new GlobalizedMessage(
|
||||||
"cms.ui.folder.delete_confirmation_assets",
|
"cms.ui.folder.delete_confirmation_assets",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE));
|
CmsConstants.CMS_FOLDER_BUNDLE));
|
||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -367,7 +373,7 @@ public class AssetFolderBrowser extends Table {
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetFolderBrowserController controller = cdiUtil.findBean(
|
final AssetFolderBrowserController controller = cdiUtil.findBean(
|
||||||
AssetFolderBrowserController.class);
|
AssetFolderBrowserController.class);
|
||||||
controller.deleteObject((String) event.getRowKey());
|
controller.deleteObject((String) event.getRowKey());
|
||||||
|
|
||||||
((Table) event.getSource()).clearSelection(state);
|
((Table) event.getSource()).clearSelection(state);
|
||||||
|
|
@ -387,9 +393,16 @@ public class AssetFolderBrowser extends Table {
|
||||||
}
|
}
|
||||||
|
|
||||||
clearSelection(state);
|
clearSelection(state);
|
||||||
getFolderSelectionModel().setSelectedKey(
|
final String rowKey = (String) event.getRowKey();
|
||||||
state,
|
if (rowKey.startsWith(CmsConstants.FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
||||||
getObjectId(event.getRowKey()));
|
getFolderSelectionModel().setSelectedKey(state,
|
||||||
|
getObjectId(rowKey));
|
||||||
|
} else if (rowKey.startsWith(
|
||||||
|
CmsConstants.FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
|
||||||
|
getSelectedAssetModel().setSelectedKey(state,
|
||||||
|
getObjectId(rowKey));
|
||||||
|
assetPane.editAssetMode(state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,8 @@ import org.librecms.contentsection.FolderRepository;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.CmsConstants.*;
|
||||||
|
|
||||||
|
|
@ -68,6 +70,9 @@ import static org.librecms.CmsConstants.*;
|
||||||
@RequestScoped
|
@RequestScoped
|
||||||
public class AssetFolderBrowserController {
|
public class AssetFolderBrowserController {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManager
|
||||||
|
.getLogger(AssetFolderBrowserController.class);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private EntityManager entityManager;
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
|
@ -106,7 +111,7 @@ public class AssetFolderBrowserController {
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
private void init() {
|
private void init() {
|
||||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||||
KernelConfig.class);
|
KernelConfig.class);
|
||||||
defaultLocale = kernelConfig.getDefaultLocale();
|
defaultLocale = kernelConfig.getDefaultLocale();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -123,9 +128,9 @@ public class AssetFolderBrowserController {
|
||||||
firstResult,
|
firstResult,
|
||||||
maxResults);
|
maxResults);
|
||||||
final List<AssetFolderBrowserTableRow> subFolderRows = subFolders
|
final List<AssetFolderBrowserTableRow> subFolderRows = subFolders
|
||||||
.stream()
|
.stream()
|
||||||
.map(subFolder -> buildRow(subFolder))
|
.map(subFolder -> buildRow(subFolder))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if (subFolders.size() > maxResults) {
|
if (subFolders.size() > maxResults) {
|
||||||
return subFolderRows;
|
return subFolderRows;
|
||||||
|
|
@ -140,9 +145,9 @@ public class AssetFolderBrowserController {
|
||||||
firstAsset,
|
firstAsset,
|
||||||
maxAssets);
|
maxAssets);
|
||||||
final List<AssetFolderBrowserTableRow> assetRows = assets
|
final List<AssetFolderBrowserTableRow> assetRows = assets
|
||||||
.stream()
|
.stream()
|
||||||
.map(asset -> buildRow(asset))
|
.map(asset -> buildRow(asset))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
final List<AssetFolderBrowserTableRow> rows = new ArrayList<>();
|
final List<AssetFolderBrowserTableRow> rows = new ArrayList<>();
|
||||||
rows.addAll(subFolderRows);
|
rows.addAll(subFolderRows);
|
||||||
|
|
@ -172,19 +177,19 @@ public class AssetFolderBrowserController {
|
||||||
criteriaQuery = criteriaQuery.select(builder.count(from));
|
criteriaQuery = criteriaQuery.select(builder.count(from));
|
||||||
|
|
||||||
final List<Folder> subFolders = findSubFolders(
|
final List<Folder> subFolders = findSubFolders(
|
||||||
folder,
|
folder,
|
||||||
filterTerm,
|
filterTerm,
|
||||||
AssetFolderBrowser.SORT_KEY_NAME,
|
AssetFolderBrowser.SORT_KEY_NAME,
|
||||||
AssetFolderBrowser.SORT_ACTION_UP,
|
AssetFolderBrowser.SORT_ACTION_UP,
|
||||||
-1,
|
-1,
|
||||||
-1);
|
-1);
|
||||||
final List<Asset> assets = findAssetsInFolder(
|
final List<Asset> assets = findAssetsInFolder(
|
||||||
folder,
|
folder,
|
||||||
filterTerm,
|
filterTerm,
|
||||||
AssetFolderBrowser.SORT_KEY_NAME,
|
AssetFolderBrowser.SORT_KEY_NAME,
|
||||||
AssetFolderBrowser.SORT_ACTION_UP,
|
AssetFolderBrowser.SORT_ACTION_UP,
|
||||||
-1,
|
-1,
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
if (subFolders.isEmpty() && assets.isEmpty()) {
|
if (subFolders.isEmpty() && assets.isEmpty()) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -194,8 +199,8 @@ public class AssetFolderBrowserController {
|
||||||
criteriaQuery = criteriaQuery.where(from.in(subFolders));
|
criteriaQuery = criteriaQuery.where(from.in(subFolders));
|
||||||
} else {
|
} else {
|
||||||
criteriaQuery = criteriaQuery.where(builder.or(
|
criteriaQuery = criteriaQuery.where(builder.or(
|
||||||
from.in(subFolders),
|
from.in(subFolders),
|
||||||
from.in(assets)));
|
from.in(assets)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return entityManager.createQuery(criteriaQuery).getSingleResult();
|
return entityManager.createQuery(criteriaQuery).getSingleResult();
|
||||||
|
|
@ -213,17 +218,17 @@ public class AssetFolderBrowserController {
|
||||||
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
||||||
copyFolder(targetFolder,
|
copyFolder(targetFolder,
|
||||||
Long.parseLong(objectId.substring(
|
Long.parseLong(objectId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
|
||||||
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
|
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
|
||||||
copyAsset(targetFolder,
|
copyAsset(targetFolder,
|
||||||
Long.parseLong(objectId.substring(
|
Long.parseLong(objectId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_ITEM.length())));
|
FOLDER_BROWSER_KEY_PREFIX_ASSET.length())));
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"ID '%s' does not start with '%s' or '%s'.",
|
"ID '%s' does not start with '%s' or '%s'.",
|
||||||
objectId,
|
objectId,
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
||||||
FOLDER_BROWSER_KEY_PREFIX_ASSET));
|
FOLDER_BROWSER_KEY_PREFIX_ASSET));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -235,10 +240,10 @@ public class AssetFolderBrowserController {
|
||||||
Objects.requireNonNull(targetFolder);
|
Objects.requireNonNull(targetFolder);
|
||||||
|
|
||||||
final Folder folder = folderRepo.findById(folderId)
|
final Folder folder = folderRepo.findById(folderId)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
"No folder with ID %d in the database. "
|
"No folder with ID %d in the database. "
|
||||||
+ "Where did that ID come from?",
|
+ "Where did that ID come from?",
|
||||||
folderId)));
|
folderId)));
|
||||||
|
|
||||||
folderManager.copyFolder(folder, targetFolder);
|
folderManager.copyFolder(folder, targetFolder);
|
||||||
|
|
||||||
|
|
@ -250,10 +255,10 @@ public class AssetFolderBrowserController {
|
||||||
Objects.requireNonNull(targetFolder);
|
Objects.requireNonNull(targetFolder);
|
||||||
|
|
||||||
final Asset asset = assetRepo
|
final Asset asset = assetRepo
|
||||||
.findById(assetId)
|
.findById(assetId)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
"No asset ith ID %d in the database. Where did that ID come from?",
|
"No asset ith ID %d in the database. Where did that ID come from?",
|
||||||
assetId)));
|
assetId)));
|
||||||
|
|
||||||
assetManager.copy(asset, targetFolder);
|
assetManager.copy(asset, targetFolder);
|
||||||
}
|
}
|
||||||
|
|
@ -269,17 +274,17 @@ public class AssetFolderBrowserController {
|
||||||
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
||||||
moveFolder(targetFolder,
|
moveFolder(targetFolder,
|
||||||
Long.parseLong(objectId.substring(
|
Long.parseLong(objectId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
|
||||||
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
|
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
|
||||||
moveAsset(targetFolder,
|
moveAsset(targetFolder,
|
||||||
Long.parseLong(objectId.substring(
|
Long.parseLong(objectId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_ASSET.length())));
|
FOLDER_BROWSER_KEY_PREFIX_ASSET.length())));
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"ID '%s' does not start with '%s' or '%s'.",
|
"ID '%s' does not start with '%s' or '%s'.",
|
||||||
objectId,
|
objectId,
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
||||||
FOLDER_BROWSER_KEY_PREFIX_ASSET));
|
FOLDER_BROWSER_KEY_PREFIX_ASSET));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -289,10 +294,10 @@ public class AssetFolderBrowserController {
|
||||||
Objects.requireNonNull(targetFolder);
|
Objects.requireNonNull(targetFolder);
|
||||||
|
|
||||||
final Folder folder = folderRepo.findById(folderId)
|
final Folder folder = folderRepo.findById(folderId)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
"No folder with ID %d in the database. "
|
"No folder with ID %d in the database. "
|
||||||
+ "Where did that ID come from?",
|
+ "Where did that ID come from?",
|
||||||
folderId)));
|
folderId)));
|
||||||
|
|
||||||
folderManager.moveFolder(folder, targetFolder);
|
folderManager.moveFolder(folder, targetFolder);
|
||||||
}
|
}
|
||||||
|
|
@ -302,10 +307,10 @@ public class AssetFolderBrowserController {
|
||||||
Objects.requireNonNull(targetFolder);
|
Objects.requireNonNull(targetFolder);
|
||||||
|
|
||||||
final Asset asset = assetRepo
|
final Asset asset = assetRepo
|
||||||
.findById(assetId)
|
.findById(assetId)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
"No asset with ID %d in the database. Where did that ID come from?",
|
"No asset with ID %d in the database. Where did that ID come from?",
|
||||||
assetId)));
|
assetId)));
|
||||||
|
|
||||||
assetManager.move(asset, targetFolder);
|
assetManager.move(asset, targetFolder);
|
||||||
}
|
}
|
||||||
|
|
@ -316,20 +321,20 @@ public class AssetFolderBrowserController {
|
||||||
Objects.requireNonNull(sources);
|
Objects.requireNonNull(sources);
|
||||||
|
|
||||||
final List<String> sourceFolderIds = sources
|
final List<String> sourceFolderIds = sources
|
||||||
.stream()
|
.stream()
|
||||||
.filter(source -> source.startsWith(
|
.filter(source -> source.startsWith(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER))
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
final List<String> parentFolderIds = sourceFolderIds
|
final List<String> parentFolderIds = sourceFolderIds
|
||||||
.stream()
|
.stream()
|
||||||
.map(sourceFolderId -> findParentFolderId(sourceFolderId))
|
.map(sourceFolderId -> findParentFolderId(sourceFolderId))
|
||||||
.filter(Optional::isPresent)
|
.filter(Optional::isPresent)
|
||||||
.map(Optional::get)
|
.map(Optional::get)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
final List<List<String>> subFolderIds = sourceFolderIds
|
final List<List<String>> subFolderIds = sourceFolderIds
|
||||||
.stream()
|
.stream()
|
||||||
.map(sourceFolderId -> findSubFolderIds(sourceFolderId))
|
.map(sourceFolderId -> findSubFolderIds(sourceFolderId))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
final List<String> invalidTargetIds = new ArrayList<>();
|
final List<String> invalidTargetIds = new ArrayList<>();
|
||||||
invalidTargetIds.addAll(sourceFolderIds);
|
invalidTargetIds.addAll(sourceFolderIds);
|
||||||
|
|
@ -348,26 +353,26 @@ public class AssetFolderBrowserController {
|
||||||
|
|
||||||
if (!folderId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
if (!folderId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"Provided string '%s' is not an ID of a folder.",
|
"Provided string '%s' is not an ID of a folder.",
|
||||||
folderId));
|
folderId));
|
||||||
}
|
}
|
||||||
|
|
||||||
final long objectId = Long.parseLong(folderId.substring(
|
final long objectId = Long.parseLong(folderId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
||||||
final Folder folder = folderRepo.findById(objectId)
|
final Folder folder = folderRepo.findById(objectId)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
"No folder with ID %d found in database. "
|
"No folder with ID %d found in database. "
|
||||||
+ "Where did that ID come form?",
|
+ "Where did that ID come form?",
|
||||||
objectId)));
|
objectId)));
|
||||||
final Optional<Folder> parentFolder = folderManager.getParentFolder(
|
final Optional<Folder> parentFolder = folderManager.getParentFolder(
|
||||||
folder);
|
folder);
|
||||||
if (parentFolder.isPresent()) {
|
if (parentFolder.isPresent()) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
} else {
|
} else {
|
||||||
return Optional.ofNullable(String.format(
|
return Optional.ofNullable(String.format(
|
||||||
"%s%d",
|
"%s%d",
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
||||||
parentFolder.get().getObjectId()));
|
parentFolder.get().getObjectId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -377,23 +382,23 @@ public class AssetFolderBrowserController {
|
||||||
|
|
||||||
if (!folderId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
if (!folderId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"Provided string '%s' is not the ID of a folder.",
|
"Provided string '%s' is not the ID of a folder.",
|
||||||
folderId));
|
folderId));
|
||||||
}
|
}
|
||||||
|
|
||||||
final long objectId = Long.parseLong(folderId.substring(
|
final long objectId = Long.parseLong(folderId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
||||||
final Folder folder = folderRepo.findById(objectId)
|
final Folder folder = folderRepo.findById(objectId)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
"No folder with ID %d found in database. "
|
"No folder with ID %d found in database. "
|
||||||
+ "Where did that ID come form?",
|
+ "Where did that ID come form?",
|
||||||
objectId)));
|
objectId)));
|
||||||
return findSubFolders(folder)
|
return findSubFolders(folder)
|
||||||
.stream()
|
.stream()
|
||||||
.map(subFolder -> String.format("%s%d",
|
.map(subFolder -> String.format("%s%d",
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
||||||
subFolder.getObjectId()))
|
subFolder.getObjectId()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Folder> findSubFolders(final Folder folder) {
|
private List<Folder> findSubFolders(final Folder folder) {
|
||||||
|
|
@ -401,7 +406,7 @@ public class AssetFolderBrowserController {
|
||||||
Objects.requireNonNull(folder);
|
Objects.requireNonNull(folder);
|
||||||
|
|
||||||
if (folder.getSubFolders() == null
|
if (folder.getSubFolders() == null
|
||||||
|| folder.getSubFolders().isEmpty()) {
|
|| folder.getSubFolders().isEmpty()) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -426,21 +431,21 @@ public class AssetFolderBrowserController {
|
||||||
|
|
||||||
if (objectId.startsWith("folder-")) {
|
if (objectId.startsWith("folder-")) {
|
||||||
final long folderId = Long.parseLong(
|
final long folderId = Long.parseLong(
|
||||||
objectId.substring("folder-".length()));
|
objectId.substring("folder-".length()));
|
||||||
|
|
||||||
folderRepo
|
folderRepo
|
||||||
.findById(folderId)
|
.findById(folderId)
|
||||||
.ifPresent(folderRepo::delete);
|
.ifPresent(folderRepo::delete);
|
||||||
} else if (objectId.startsWith("asset-")) {
|
} else if (objectId.startsWith("asset-")) {
|
||||||
final long assetId = Long.parseLong(
|
final long assetId = Long.parseLong(
|
||||||
objectId.substring("asset-".length()));
|
objectId.substring("asset-".length()));
|
||||||
|
|
||||||
assetRepo
|
assetRepo
|
||||||
.findById(assetId)
|
.findById(assetId)
|
||||||
.ifPresent(assetRepo::delete);
|
.ifPresent(assetRepo::delete);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"The objectId is expected to start with 'folder-' or 'item.'.");
|
"The objectId is expected to start with 'folder-' or 'asset-'.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -452,15 +457,15 @@ public class AssetFolderBrowserController {
|
||||||
row.setObjectUuid(folder.getUuid());
|
row.setObjectUuid(folder.getUuid());
|
||||||
row.setName(folder.getName());
|
row.setName(folder.getName());
|
||||||
if (folder.getTitle().hasValue(globalizationHelper
|
if (folder.getTitle().hasValue(globalizationHelper
|
||||||
.getNegotiatedLocale())) {
|
.getNegotiatedLocale())) {
|
||||||
row.setTitle(folder.getTitle().getValue(globalizationHelper
|
row.setTitle(folder.getTitle().getValue(globalizationHelper
|
||||||
.getNegotiatedLocale()));
|
.getNegotiatedLocale()));
|
||||||
} else {
|
} else {
|
||||||
row.setTitle(folder.getTitle().getValue(defaultLocale));
|
row.setTitle(folder.getTitle().getValue(defaultLocale));
|
||||||
}
|
}
|
||||||
row.setFolder(true);
|
row.setFolder(true);
|
||||||
row.setDeletable(!categoryManager.hasSubCategories(folder)
|
row.setDeletable(!categoryManager.hasSubCategories(folder)
|
||||||
&& !categoryManager.hasObjects(folder));
|
&& !categoryManager.hasObjects(folder));
|
||||||
|
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
@ -473,14 +478,14 @@ public class AssetFolderBrowserController {
|
||||||
row.setObjectUuid(asset.getUuid());
|
row.setObjectUuid(asset.getUuid());
|
||||||
row.setName(asset.getDisplayName());
|
row.setName(asset.getDisplayName());
|
||||||
if (asset.getTitle().hasValue(globalizationHelper
|
if (asset.getTitle().hasValue(globalizationHelper
|
||||||
.getNegotiatedLocale())) {
|
.getNegotiatedLocale())) {
|
||||||
row.setTitle(asset.getTitle().getValue(globalizationHelper
|
row.setTitle(asset.getTitle().getValue(globalizationHelper
|
||||||
.getNegotiatedLocale()));
|
.getNegotiatedLocale()));
|
||||||
} else {
|
} else {
|
||||||
row.setTitle(asset.getTitle().getValue(defaultLocale));
|
row.setTitle(asset.getTitle().getValue(defaultLocale));
|
||||||
}
|
}
|
||||||
final AssetTypeInfo typeInfo = typesManager
|
final AssetTypeInfo typeInfo = typesManager
|
||||||
.getAssetTypeInfo(asset.getClass());
|
.getAssetTypeInfo(asset.getClass());
|
||||||
row.setTypeLabelBundle(typeInfo.getLabelBundle());
|
row.setTypeLabelBundle(typeInfo.getLabelBundle());
|
||||||
row.setTypeLabelKey(typeInfo.getLabelKey());
|
row.setTypeLabelKey(typeInfo.getLabelKey());
|
||||||
|
|
||||||
|
|
@ -501,30 +506,32 @@ public class AssetFolderBrowserController {
|
||||||
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
||||||
|
|
||||||
final CriteriaQuery<Folder> criteria = builder
|
final CriteriaQuery<Folder> criteria = builder
|
||||||
.createQuery(Folder.class);
|
.createQuery(Folder.class);
|
||||||
final Root<Folder> from = criteria.from(Folder.class);
|
final Root<Folder> from = criteria.from(Folder.class);
|
||||||
|
|
||||||
final Order order;
|
final Order order;
|
||||||
if (AssetFolderBrowser.SORT_KEY_NAME.equals(orderBy)
|
if (AssetFolderBrowser.SORT_KEY_NAME.equals(orderBy)
|
||||||
&& AssetFolderBrowser.SORT_ACTION_DOWN.
|
&& AssetFolderBrowser.SORT_ACTION_DOWN.
|
||||||
equals(orderDirection)) {
|
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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
final TypedQuery<Folder> query = entityManager
|
final TypedQuery<Folder> query = entityManager
|
||||||
.createQuery(
|
.createQuery(
|
||||||
criteria.where(
|
criteria.where(
|
||||||
builder.and(
|
builder.and(
|
||||||
builder.equal(from.get("parentCategory"),
|
builder.
|
||||||
folder),
|
equal(from.get("parentCategory"),
|
||||||
builder.like(builder.lower(from.get("name")),
|
folder),
|
||||||
filterTerm)
|
builder.like(builder.lower(from.get(
|
||||||
)
|
"name")),
|
||||||
)
|
filterTerm)
|
||||||
.orderBy(order)
|
)
|
||||||
);
|
)
|
||||||
|
.orderBy(order)
|
||||||
|
);
|
||||||
|
|
||||||
if (firstResult >= 0) {
|
if (firstResult >= 0) {
|
||||||
query.setFirstResult(firstResult);
|
query.setFirstResult(firstResult);
|
||||||
|
|
@ -573,22 +580,37 @@ public class AssetFolderBrowserController {
|
||||||
order = builder.asc(orderPath);
|
order = builder.asc(orderPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOGGER.debug("The database contains {} assets.",
|
||||||
|
entityManager.createQuery(criteria.select(fromAsset)
|
||||||
|
.where(
|
||||||
|
builder.and(
|
||||||
|
builder.equal(join.get("category"),
|
||||||
|
folder),
|
||||||
|
builder.equal(join.get("type"),
|
||||||
|
CmsConstants.CATEGORIZATION_TYPE_FOLDER),
|
||||||
|
builder.like(builder.lower(
|
||||||
|
fromAsset.get(
|
||||||
|
"displayName")),
|
||||||
|
filterTerm)
|
||||||
|
))).getResultList().size());
|
||||||
|
|
||||||
final TypedQuery<Asset> query = entityManager
|
final TypedQuery<Asset> query = entityManager
|
||||||
.createQuery(
|
.createQuery(
|
||||||
criteria.select(fromAsset)
|
criteria.select(fromAsset)
|
||||||
.where(
|
.where(
|
||||||
builder.and(
|
builder.and(
|
||||||
builder.equal(join.get(
|
builder.equal(join.get(
|
||||||
"category"), folder),
|
"category"), folder),
|
||||||
builder.equal(join.get("type"),
|
builder.equal(join.get("type"),
|
||||||
CmsConstants.CATEGORIZATION_TYPE_FOLDER),
|
CmsConstants.CATEGORIZATION_TYPE_FOLDER),
|
||||||
builder.like(builder.lower(fromAsset.get(
|
builder.like(builder.lower(
|
||||||
"displayName")),
|
fromAsset.get(
|
||||||
filterTerm)
|
"displayName")),
|
||||||
)
|
filterTerm)
|
||||||
)
|
)
|
||||||
.orderBy(order)
|
)
|
||||||
);
|
.orderBy(order)
|
||||||
|
);
|
||||||
|
|
||||||
if (firstResult >= 0) {
|
if (firstResult >= 0) {
|
||||||
query.setFirstResult(firstResult);
|
query.setFirstResult(firstResult);
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ class AssetFolderBrowserTableModel implements TableModel {
|
||||||
if (currentRow.isFolder()) {
|
if (currentRow.isFolder()) {
|
||||||
return String.format("folder-%d", currentRow.getObjectId());
|
return String.format("folder-%d", currentRow.getObjectId());
|
||||||
} else {
|
} else {
|
||||||
return String.format("item-%d", currentRow.getObjectId());
|
return String.format("asset-%d", currentRow.getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// return currentRow.getObjectId();
|
// return currentRow.getObjectId();
|
||||||
|
|
|
||||||
|
|
@ -39,25 +39,25 @@ 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>
|
||||||
*/
|
*/
|
||||||
class AssetFolderBrowserTableModelBuilder
|
class AssetFolderBrowserTableModelBuilder
|
||||||
extends LockableImpl
|
extends LockableImpl
|
||||||
implements TableModelBuilder {
|
implements TableModelBuilder {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager
|
private static final Logger LOGGER = LogManager
|
||||||
.getLogger(AssetFolderBrowserTableModelBuilder.class);
|
.getLogger(AssetFolderBrowserTableModelBuilder.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableModel makeModel(final Table table,
|
public TableModel makeModel(final Table table,
|
||||||
final PageState state) {
|
final PageState state) {
|
||||||
|
|
||||||
if (!(table instanceof AssetFolderBrowser)) {
|
if (!(table instanceof AssetFolderBrowser)) {
|
||||||
throw new IllegalArgumentException("The "
|
throw new IllegalArgumentException(
|
||||||
+ "AssetFolderBrowserTableModelBuilder can only be used for the "
|
"The AssetFolderBrowserTableModelBuilder can only be used "
|
||||||
+ "AssetFolderBrowser.");
|
+ "for the AssetFolderBrowser.");
|
||||||
}
|
}
|
||||||
|
|
||||||
final AssetFolderBrowser assetFolderBrowser = (AssetFolderBrowser) table;
|
final AssetFolderBrowser assetFolderBrowser = (AssetFolderBrowser) table;
|
||||||
final FolderSelectionModel folderSelectionModel = assetFolderBrowser
|
final FolderSelectionModel folderSelectionModel = assetFolderBrowser
|
||||||
.getFolderSelectionModel();
|
.getFolderSelectionModel();
|
||||||
final Folder folder = folderSelectionModel.getSelectedObject(state);
|
final Folder folder = folderSelectionModel.getSelectedObject(state);
|
||||||
if (folder == null) {
|
if (folder == null) {
|
||||||
return Table.EMPTY_MODEL;
|
return Table.EMPTY_MODEL;
|
||||||
|
|
@ -66,7 +66,7 @@ class AssetFolderBrowserTableModelBuilder
|
||||||
final Paginator paginator = assetFolderBrowser.getPaginator();
|
final Paginator paginator = assetFolderBrowser.getPaginator();
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetFolderBrowserController controller = cdiUtil
|
final AssetFolderBrowserController controller = cdiUtil
|
||||||
.findBean(AssetFolderBrowserController.class);
|
.findBean(AssetFolderBrowserController.class);
|
||||||
final String orderBy;
|
final String orderBy;
|
||||||
if (assetFolderBrowser.getSortType(state) == null) {
|
if (assetFolderBrowser.getSortType(state) == null) {
|
||||||
orderBy = AssetFolderBrowser.SORT_KEY_NAME;
|
orderBy = AssetFolderBrowser.SORT_KEY_NAME;
|
||||||
|
|
@ -85,11 +85,11 @@ class AssetFolderBrowserTableModelBuilder
|
||||||
final long start = System.nanoTime();
|
final long start = System.nanoTime();
|
||||||
LOGGER.debug("Retrieving table rows...");
|
LOGGER.debug("Retrieving table rows...");
|
||||||
final List<AssetFolderBrowserTableRow> rows = controller
|
final List<AssetFolderBrowserTableRow> rows = controller
|
||||||
.getAssetRows(folder,
|
.getAssetRows(folder,
|
||||||
orderBy,
|
orderBy,
|
||||||
orderDirection,
|
orderDirection,
|
||||||
first - 1,
|
first - 1,
|
||||||
pageSize);
|
pageSize);
|
||||||
|
|
||||||
LOGGER.debug("Retrieve table rows in {} ms.",
|
LOGGER.debug("Retrieve table rows in {} ms.",
|
||||||
(System.nanoTime() - start) / 1000);
|
(System.nanoTime() - start) / 1000);
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,9 @@ import org.librecms.contentsection.Asset;
|
||||||
import org.librecms.contentsection.AssetRepository;
|
import org.librecms.contentsection.AssetRepository;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import org.libreccm.categorization.CategoryManager;
|
||||||
|
import org.librecms.contentsection.Folder;
|
||||||
|
import org.librecms.contentsection.FolderManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -75,6 +78,10 @@ public abstract class AssetForm extends Form implements FormInitListener,
|
||||||
|
|
||||||
saveCancelSection = new SaveCancelSection();
|
saveCancelSection = new SaveCancelSection();
|
||||||
add(saveCancelSection);
|
add(saveCancelSection);
|
||||||
|
|
||||||
|
addInitListener(this);
|
||||||
|
addProcessListener(this);
|
||||||
|
addSubmissionListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addWidgets() {
|
protected void addWidgets() {
|
||||||
|
|
@ -92,12 +99,13 @@ public abstract class AssetForm extends Form implements FormInitListener,
|
||||||
} else {
|
} else {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetRepository assetRepo = cdiUtil.findBean(
|
final AssetRepository assetRepo = cdiUtil.findBean(
|
||||||
AssetRepository.class);
|
AssetRepository.class);
|
||||||
final Asset asset = assetRepo
|
final Asset asset = assetRepo
|
||||||
.findById(selectionModel.getSelectedKey(state))
|
.findById(selectionModel.getSelectedKey(state))
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(() -> new IllegalArgumentException(String.
|
||||||
"No asset with ID %d in the database.",
|
format(
|
||||||
selectionModel.getSelectedKey(state))));
|
"No asset with ID %d in the database.",
|
||||||
|
selectionModel.getSelectedKey(state))));
|
||||||
return Optional.of(asset);
|
return Optional.of(asset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -112,18 +120,18 @@ public abstract class AssetForm extends Form implements FormInitListener,
|
||||||
if (selectedAsset.isPresent()) {
|
if (selectedAsset.isPresent()) {
|
||||||
title.setValue(state,
|
title.setValue(state,
|
||||||
selectedAsset
|
selectedAsset
|
||||||
.get()
|
.get()
|
||||||
.getTitle()
|
.getTitle()
|
||||||
.getValue(KernelConfig
|
.getValue(KernelConfig
|
||||||
.getConfig()
|
.getConfig()
|
||||||
.getDefaultLocale()));
|
.getDefaultLocale()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event)
|
public void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
|
@ -138,26 +146,45 @@ public abstract class AssetForm extends Form implements FormInitListener,
|
||||||
}
|
}
|
||||||
|
|
||||||
asset.getTitle().addValue(
|
asset.getTitle().addValue(
|
||||||
KernelConfig.getConfig().getDefaultLocale(),
|
KernelConfig.getConfig().getDefaultLocale(),
|
||||||
(String) title.getValue(state));
|
(String) title.getValue(state));
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetRepository assetRepo = cdiUtil
|
final AssetRepository assetRepo = cdiUtil
|
||||||
.findBean(AssetRepository.class);
|
.findBean(AssetRepository.class);
|
||||||
assetRepo.save(asset);
|
assetRepo.save(asset);
|
||||||
|
|
||||||
|
if (!selectedAsset.isPresent()) {
|
||||||
|
//Set display name
|
||||||
|
asset.setDisplayName((String) title.getValue(state));
|
||||||
|
assetRepo.save(asset);
|
||||||
|
|
||||||
|
//Add new asset to currently selected folder
|
||||||
|
final Folder selectedFolder = assetPane
|
||||||
|
.getFolderSelectionModel()
|
||||||
|
.getSelectedObject(state);
|
||||||
|
final CategoryManager categoryManager = cdiUtil
|
||||||
|
.findBean(CategoryManager.class);
|
||||||
|
categoryManager.addObjectToCategory(
|
||||||
|
asset,
|
||||||
|
selectedFolder,
|
||||||
|
CmsConstants.CATEGORIZATION_TYPE_FOLDER);
|
||||||
|
}
|
||||||
|
|
||||||
|
assetPane.browseMode(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Asset createAsset(final PageState state)
|
protected abstract Asset createAsset(final PageState state)
|
||||||
throws FormProcessException;
|
throws FormProcessException;
|
||||||
|
|
||||||
protected abstract void updateAsset(final Asset asset,
|
protected abstract void updateAsset(final Asset asset,
|
||||||
final PageState state)
|
final PageState state)
|
||||||
throws FormProcessException;
|
throws FormProcessException;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitted(final FormSectionEvent event)
|
public void submitted(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import com.arsdigita.bebop.Form;
|
||||||
import com.arsdigita.bebop.FormData;
|
import com.arsdigita.bebop.FormData;
|
||||||
import com.arsdigita.bebop.FormProcessException;
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
import com.arsdigita.bebop.Label;
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.MetaForm;
|
||||||
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.Paginator;
|
||||||
|
|
@ -69,6 +70,7 @@ import com.arsdigita.cms.ui.folder.FolderTreeModelController;
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.toolbox.ui.ActionGroup;
|
import com.arsdigita.toolbox.ui.ActionGroup;
|
||||||
import com.arsdigita.toolbox.ui.LayoutPanel;
|
import com.arsdigita.toolbox.ui.LayoutPanel;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
@ -98,6 +100,7 @@ import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.util.TooManyListenersException;
|
import java.util.TooManyListenersException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.CmsConstants.*;
|
||||||
|
|
||||||
|
|
@ -121,9 +124,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
private final FolderRequestLocal folderRequestLocal;
|
private final FolderRequestLocal folderRequestLocal;
|
||||||
private final SingleSelectionModel<Long> selectedAssetModel;
|
private final SingleSelectionModel<Long> selectedAssetModel;
|
||||||
private final ArrayParameter sourcesParameter = new ArrayParameter(
|
private final ArrayParameter sourcesParameter = new ArrayParameter(
|
||||||
new StringParameter(SOURCES_PARAM));
|
new StringParameter(SOURCES_PARAM));
|
||||||
private final StringParameter actionParameter = new StringParameter(
|
private final StringParameter actionParameter = new StringParameter(
|
||||||
ACTION_PARAM);
|
ACTION_PARAM);
|
||||||
|
private final StringParameter selectedAssetTypeParam = new StringParameter(
|
||||||
|
"selected_asset_type");
|
||||||
|
|
||||||
private AssetFolderBrowser folderBrowser;
|
private AssetFolderBrowser folderBrowser;
|
||||||
private Form browserForm;
|
private Form browserForm;
|
||||||
|
|
@ -136,7 +141,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
private SegmentedPanel.Segment actionsSegment;
|
private SegmentedPanel.Segment actionsSegment;
|
||||||
private SegmentedPanel.Segment newFolderSegment;
|
private SegmentedPanel.Segment newFolderSegment;
|
||||||
private SegmentedPanel.Segment editFolderSegment;
|
private SegmentedPanel.Segment editFolderSegment;
|
||||||
private SegmentedPanel.Segment editAssetSegement;
|
private SegmentedPanel.Segment editAssetSegment;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public AssetPane() {
|
public AssetPane() {
|
||||||
|
|
@ -145,8 +150,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
@Override
|
@Override
|
||||||
protected Folder getRootFolder(final PageState state) {
|
protected Folder getRootFolder(final PageState state) {
|
||||||
final ContentSection section = CMS
|
final ContentSection section = CMS
|
||||||
.getContext()
|
.getContext()
|
||||||
.getContentSection();
|
.getContentSection();
|
||||||
return section.getRootAssetsFolder();
|
return section.getRootAssetsFolder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -157,8 +162,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
@Override
|
@Override
|
||||||
protected Long getRootFolderID(final PageState state) {
|
protected Long getRootFolderID(final PageState state) {
|
||||||
final ContentSection section = CMS
|
final ContentSection section = CMS
|
||||||
.getContext()
|
.getContext()
|
||||||
.getContentSection();
|
.getContentSection();
|
||||||
return section.getRootAssetsFolder().getObjectId();
|
return section.getRootAssetsFolder().getObjectId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -166,14 +171,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
folderRequestLocal = new FolderRequestLocal(folderSelectionModel);
|
folderRequestLocal = new FolderRequestLocal(folderSelectionModel);
|
||||||
|
|
||||||
selectedAssetModel = new ParameterSingleSelectionModel<>(
|
selectedAssetModel = new ParameterSingleSelectionModel<>(
|
||||||
new LongParameter("selected-asset"));
|
new LongParameter("selected-asset"));
|
||||||
|
|
||||||
final SegmentedPanel left = new SegmentedPanel();
|
final SegmentedPanel left = new SegmentedPanel();
|
||||||
setLeft(left);
|
setLeft(left);
|
||||||
|
|
||||||
final Label heading = new Label(
|
final Label heading = new Label(
|
||||||
new GlobalizedMessage("cms.ui.folder_browser",
|
new GlobalizedMessage("cms.ui.folder_browser",
|
||||||
CmsConstants.CMS_BUNDLE));
|
CmsConstants.CMS_BUNDLE));
|
||||||
left.addSegment(heading, tree);
|
left.addSegment(heading, tree);
|
||||||
|
|
||||||
// final Text placeholder = new Text("Placeholder");
|
// final Text placeholder = new Text("Placeholder");
|
||||||
|
|
@ -189,17 +194,17 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
browserForm = new Form("assetFolderBrowser",
|
browserForm = new Form("assetFolderBrowser",
|
||||||
new BoxPanel(BoxPanel.VERTICAL));
|
new BoxPanel(BoxPanel.VERTICAL));
|
||||||
browserForm.setMethod(Form.GET);
|
browserForm.setMethod(Form.GET);
|
||||||
folderBrowser = new AssetFolderBrowser(folderSelectionModel);
|
folderBrowser = new AssetFolderBrowser(this);
|
||||||
final Paginator paginator = new Paginator(
|
final Paginator paginator = new Paginator(
|
||||||
new AssetFolderBrowserPaginationModelBuilder(folderBrowser),
|
new AssetFolderBrowserPaginationModelBuilder(folderBrowser),
|
||||||
CMSConfig.getConfig().getFolderBrowseListSize());
|
CMSConfig.getConfig().getFolderBrowseListSize());
|
||||||
folderBrowser.setPaginator(paginator);
|
folderBrowser.setPaginator(paginator);
|
||||||
|
|
||||||
final CheckboxGroup checkboxGroup = new CheckboxGroup(sourcesParameter);
|
final CheckboxGroup checkboxGroup = new CheckboxGroup(sourcesParameter);
|
||||||
browserForm.add(checkboxGroup);
|
browserForm.add(checkboxGroup);
|
||||||
final TableColumn checkboxCol = new TableColumn();
|
final TableColumn checkboxCol = new TableColumn();
|
||||||
checkboxCol.setHeaderValue(
|
checkboxCol.setHeaderValue(
|
||||||
new GlobalizedMessage("empty_text", CmsConstants.CMS_BUNDLE));
|
new GlobalizedMessage("empty_text", CmsConstants.CMS_BUNDLE));
|
||||||
checkboxCol.setCellRenderer(new TableCellRenderer() {
|
checkboxCol.setCellRenderer(new TableCellRenderer() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -224,31 +229,31 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
browserForm.add(folderBrowser);
|
browserForm.add(folderBrowser);
|
||||||
final SimpleContainer actionFormContainer = new SimpleContainer();
|
final SimpleContainer actionFormContainer = new SimpleContainer();
|
||||||
actionFormContainer.add(new Label(
|
actionFormContainer.add(new Label(
|
||||||
new GlobalizedMessage(
|
new GlobalizedMessage(
|
||||||
"cms.ui.folder.edit_selection",
|
"cms.ui.folder.edit_selection",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE)));
|
CmsConstants.CMS_FOLDER_BUNDLE)));
|
||||||
actionSelect = new SingleSelect(actionParameter);
|
actionSelect = new SingleSelect(actionParameter);
|
||||||
actionSelect.addOption(
|
actionSelect.addOption(
|
||||||
new Option(COPY,
|
new Option(COPY,
|
||||||
new Label(new GlobalizedMessage(
|
new Label(new GlobalizedMessage(
|
||||||
"cms.ui.folder.copy.action",
|
"cms.ui.folder.copy.action",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE))));
|
CmsConstants.CMS_FOLDER_BUNDLE))));
|
||||||
actionSelect.addOption(
|
actionSelect.addOption(
|
||||||
new Option(MOVE,
|
new Option(MOVE,
|
||||||
new Label(new GlobalizedMessage(
|
new Label(new GlobalizedMessage(
|
||||||
"cms.ui.folder.move.action",
|
"cms.ui.folder.move.action",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE))));
|
CmsConstants.CMS_FOLDER_BUNDLE))));
|
||||||
actionFormContainer.add(actionSelect);
|
actionFormContainer.add(actionSelect);
|
||||||
actionSubmit = new Submit(
|
actionSubmit = new Submit(
|
||||||
"Go",
|
"Go",
|
||||||
new GlobalizedMessage("cms.ui.folder.go",
|
new GlobalizedMessage("cms.ui.folder.go",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE));
|
CmsConstants.CMS_FOLDER_BUNDLE));
|
||||||
actionFormContainer.add(actionSubmit);
|
actionFormContainer.add(actionSubmit);
|
||||||
browserForm.addProcessListener(new FormProcessListener() {
|
browserForm.addProcessListener(new FormProcessListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event)
|
public void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
|
@ -264,7 +269,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event)
|
public void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
|
@ -285,12 +290,12 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
});
|
});
|
||||||
targetSelector.addValidationListener(
|
targetSelector.addValidationListener(
|
||||||
new TargetSelectorValidationListener());
|
new TargetSelectorValidationListener());
|
||||||
targetSelector.addSubmissionListener(new FormSubmissionListener() {
|
targetSelector.addSubmissionListener(new FormSubmissionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitted(final FormSectionEvent event)
|
public void submitted(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
|
@ -298,8 +303,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
reset(state);
|
reset(state);
|
||||||
browseMode(state);
|
browseMode(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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -321,13 +326,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
final Label target = (Label) event.getTarget();
|
final Label target = (Label) event.getTarget();
|
||||||
|
|
||||||
final long selectedId = Long.parseLong(selectionModel
|
final long selectedId = Long.parseLong(selectionModel
|
||||||
.getSelectedKey(state).toString());
|
.getSelectedKey(state).toString());
|
||||||
final long currentFolderId = folderSelectionModel
|
final long currentFolderId = folderSelectionModel
|
||||||
.getSelectedObject(state).getObjectId();
|
.getSelectedObject(state).getObjectId();
|
||||||
target.setLabel(String.format(
|
target.setLabel(String.format(
|
||||||
"selectedId = %d; currentFolderId = %d",
|
"selectedId = %d; currentFolderId = %d",
|
||||||
selectedId,
|
selectedId,
|
||||||
currentFolderId));
|
currentFolderId));
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
@ -340,19 +345,19 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
actionsSegment.add(actions);
|
actionsSegment.add(actions);
|
||||||
|
|
||||||
final FolderCreateForm folderCreateForm = new FolderCreateForm(
|
final FolderCreateForm folderCreateForm = new FolderCreateForm(
|
||||||
"fcreat", folderSelectionModel);
|
"fcreat", folderSelectionModel);
|
||||||
folderCreateForm.addSubmissionListener(new FormSubmissionListener() {
|
folderCreateForm.addSubmissionListener(new FormSubmissionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitted(final FormSectionEvent event)
|
public void submitted(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
if (event.getSource() == folderCreateForm
|
if (event.getSource() == folderCreateForm
|
||||||
&& folderCreateForm.isCancelled(state)) {
|
&& folderCreateForm.isCancelled(state)) {
|
||||||
browseMode(state);
|
browseMode(state);
|
||||||
throw new FormProcessException(new GlobalizedMessage(
|
throw new FormProcessException(new GlobalizedMessage(
|
||||||
"cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
|
"cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -362,7 +367,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event)
|
public void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final Object source = event.getSource();
|
final Object source = event.getSource();
|
||||||
|
|
@ -373,24 +378,24 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
});
|
});
|
||||||
newFolderSegment = panel.addSegment(
|
newFolderSegment = panel.addSegment(
|
||||||
new Label(new GlobalizedMessage("cms.ui.new_folder",
|
new Label(new GlobalizedMessage("cms.ui.new_folder",
|
||||||
CmsConstants.CMS_BUNDLE)),
|
CmsConstants.CMS_BUNDLE)),
|
||||||
folderCreateForm);
|
folderCreateForm);
|
||||||
|
|
||||||
final FolderEditorForm folderEditorForm = new FolderEditorForm(
|
final FolderEditorForm folderEditorForm = new FolderEditorForm(
|
||||||
"fedit", folderSelectionModel);
|
"fedit", folderSelectionModel);
|
||||||
folderEditorForm.addSubmissionListener(new FormSubmissionListener() {
|
folderEditorForm.addSubmissionListener(new FormSubmissionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitted(final FormSectionEvent event)
|
public void submitted(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
if (event.getSource() == folderEditorForm
|
if (event.getSource() == folderEditorForm
|
||||||
&& folderEditorForm.isCancelled(state)) {
|
&& folderEditorForm.isCancelled(state)) {
|
||||||
browseMode(state);
|
browseMode(state);
|
||||||
throw new FormProcessException(new GlobalizedMessage(
|
throw new FormProcessException(new GlobalizedMessage(
|
||||||
"cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
|
"cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -399,7 +404,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event)
|
public void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final Object source = event.getSource();
|
final Object source = event.getSource();
|
||||||
|
|
@ -410,13 +415,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
});
|
});
|
||||||
editFolderSegment = panel.addSegment(
|
editFolderSegment = panel.addSegment(
|
||||||
new Label(new GlobalizedMessage("cms.ui.edit_folder",
|
new Label(new GlobalizedMessage("cms.ui.edit_folder",
|
||||||
CmsConstants.CMS_BUNDLE)),
|
CmsConstants.CMS_BUNDLE)),
|
||||||
folderEditorForm);
|
folderEditorForm);
|
||||||
|
|
||||||
final ActionLink createFolderAction = new ActionLink(
|
final ActionLink createFolderAction = new ActionLink(
|
||||||
new Label(new GlobalizedMessage("cms.ui.new_folder",
|
new Label(new GlobalizedMessage("cms.ui.new_folder",
|
||||||
CmsConstants.CMS_BUNDLE)));
|
CmsConstants.CMS_BUNDLE)));
|
||||||
createFolderAction.addActionListener(new ActionListener() {
|
createFolderAction.addActionListener(new ActionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -432,8 +437,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
actions.addAction(createFolderAction);
|
actions.addAction(createFolderAction);
|
||||||
|
|
||||||
final ActionLink editFolderAction = new ActionLink(
|
final ActionLink editFolderAction = new ActionLink(
|
||||||
new Label(new GlobalizedMessage("cms.ui.edit_folder",
|
new Label(new GlobalizedMessage("cms.ui.edit_folder",
|
||||||
CmsConstants.CMS_BUNDLE)));
|
CmsConstants.CMS_BUNDLE)));
|
||||||
editFolderAction.addActionListener(new ActionListener() {
|
editFolderAction.addActionListener(new ActionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -451,9 +456,9 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
final Form newAssetForm = new Form("new-asset-form",
|
final Form newAssetForm = new Form("new-asset-form",
|
||||||
new BoxPanel(BoxPanel.HORIZONTAL));
|
new BoxPanel(BoxPanel.HORIZONTAL));
|
||||||
newAssetForm.add(new Label(new GlobalizedMessage(
|
newAssetForm.add(new Label(new GlobalizedMessage(
|
||||||
"cms.ui.assets.new", CmsConstants.CMS_BUNDLE)));
|
"cms.ui.assets.new", CmsConstants.CMS_BUNDLE)));
|
||||||
final SingleSelect newAssetTypeSelect = new SingleSelect(
|
final SingleSelect newAssetTypeSelect = new SingleSelect(
|
||||||
"new-asset-type-select");
|
selectedAssetTypeParam);
|
||||||
try {
|
try {
|
||||||
newAssetTypeSelect.addPrintListener(new PrintListener() {
|
newAssetTypeSelect.addPrintListener(new PrintListener() {
|
||||||
|
|
||||||
|
|
@ -461,18 +466,19 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
public void prepare(final PrintEvent event) {
|
public void prepare(final PrintEvent event) {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetTypesManager typesManager = cdiUtil
|
final AssetTypesManager typesManager = cdiUtil
|
||||||
.findBean(AssetTypesManager.class);
|
.findBean(AssetTypesManager.class);
|
||||||
final SingleSelect target = (SingleSelect) event.getTarget();
|
final SingleSelect target = (SingleSelect) event.getTarget();
|
||||||
|
target.clearOptions();
|
||||||
for (final AssetTypeInfo type : typesManager
|
for (final AssetTypeInfo type : typesManager
|
||||||
.getAvailableAssetTypes()) {
|
.getAvailableAssetTypes()) {
|
||||||
final String labelKey = type.getLabelKey();
|
final String labelKey = type.getLabelKey();
|
||||||
final String labelBundle = type.getLabelBundle();
|
final String labelBundle = type.getLabelBundle();
|
||||||
final ResourceBundle bundle = ResourceBundle
|
final ResourceBundle bundle = ResourceBundle
|
||||||
.getBundle(labelBundle);
|
.getBundle(labelBundle);
|
||||||
final String label = bundle.getString(labelKey);
|
final String label = bundle.getString(labelKey);
|
||||||
target.addOption(new Option(
|
target.addOption(new Option(
|
||||||
type.getAssetClass().getName(),
|
type.getAssetClass().getName(),
|
||||||
new Text(label)));
|
new Text(label)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -482,20 +488,94 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
}
|
}
|
||||||
newAssetForm.add(newAssetTypeSelect);
|
newAssetForm.add(newAssetTypeSelect);
|
||||||
newAssetForm.add(new Submit(new GlobalizedMessage(
|
newAssetForm.add(new Submit(new GlobalizedMessage(
|
||||||
"cms.ui.assets.new.create", CmsConstants.CMS_BUNDLE)));
|
"cms.ui.assets.new.create", CmsConstants.CMS_BUNDLE)));
|
||||||
newAssetForm.addProcessListener(new FormProcessListener() {
|
newAssetForm.addProcessListener(new FormProcessListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(final FormSectionEvent event)
|
public void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
editAssetMode(event.getPageState());
|
||||||
//Nothing yet
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
actionsSegment.add(newAssetForm);
|
actionsSegment.add(newAssetForm);
|
||||||
|
|
||||||
|
final MetaForm editAssetForm = new MetaForm(MOVE) {
|
||||||
|
@Override
|
||||||
|
public Form buildForm(final PageState state) {
|
||||||
|
|
||||||
|
final boolean newAsset;
|
||||||
|
|
||||||
|
final Long selectedAssetId = selectedAssetModel
|
||||||
|
.getSelectedKey(state);
|
||||||
|
newAsset = selectedAssetId == null;
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
|
||||||
|
final String selectedAssetType;
|
||||||
|
if (newAsset) {
|
||||||
|
selectedAssetType = (String) newAssetTypeSelect
|
||||||
|
.getValue(state);
|
||||||
|
} else {
|
||||||
|
final AssetRepository assetRepo = cdiUtil
|
||||||
|
.findBean(AssetRepository.class);
|
||||||
|
final Asset asset = assetRepo.findById(selectedAssetModel
|
||||||
|
.getSelectedKey(state))
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(
|
||||||
|
String.format("No asset with ID %d in the "
|
||||||
|
+ "database.",
|
||||||
|
selectedAssetModel
|
||||||
|
.getSelectedKey(state))));
|
||||||
|
selectedAssetType = asset.getClass().getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
final AssetTypesManager typesManager = cdiUtil
|
||||||
|
.findBean(AssetTypesManager.class);
|
||||||
|
final AssetTypeInfo typeInfo = typesManager
|
||||||
|
.getAssetTypeInfo(selectedAssetType);
|
||||||
|
final Class<? extends AssetForm> assetForm = typeInfo
|
||||||
|
.getAssetForm();
|
||||||
|
try {
|
||||||
|
return assetForm
|
||||||
|
.getConstructor(AssetPane.class)
|
||||||
|
.newInstance(AssetPane.this);
|
||||||
|
} catch (NoSuchMethodException
|
||||||
|
| SecurityException
|
||||||
|
| InstantiationException
|
||||||
|
| IllegalAccessException
|
||||||
|
| InvocationTargetException ex) {
|
||||||
|
throw new UnexpectedErrorException(String.format(
|
||||||
|
"Failed to create form '%s' for editing assets "
|
||||||
|
+ "of type '%s'.",
|
||||||
|
assetForm.getName(),
|
||||||
|
selectedAssetType));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
editAssetSegment = panel.addSegment();
|
||||||
|
editAssetSegment.addHeader(
|
||||||
|
new Label(new PrintListener() {
|
||||||
|
@Override
|
||||||
|
public void prepare(final PrintEvent event) {
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
final Label target = (Label) event.getTarget();
|
||||||
|
|
||||||
|
if (selectedAssetModel.isSelected(state)) {
|
||||||
|
target.setLabel(new GlobalizedMessage(
|
||||||
|
"cms.ui.admin.assets.edit",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
} else {
|
||||||
|
target.setLabel(new GlobalizedMessage(
|
||||||
|
"cms.ui.admin.assets.create",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
editAssetSegment.add(editAssetForm);
|
||||||
|
|
||||||
return panel;
|
return panel;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -509,6 +589,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
actionsSegment.setVisible(state, true);
|
actionsSegment.setVisible(state, true);
|
||||||
newFolderSegment.setVisible(state, false);
|
newFolderSegment.setVisible(state, false);
|
||||||
editFolderSegment.setVisible(state, false);
|
editFolderSegment.setVisible(state, false);
|
||||||
|
editAssetSegment.setVisible(state, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -522,6 +603,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
newFolderSegment.setVisible(state, false);
|
newFolderSegment.setVisible(state, false);
|
||||||
editFolderSegment.setVisible(state, false);
|
editFolderSegment.setVisible(state, false);
|
||||||
targetSelector.expose(state);
|
targetSelector.expose(state);
|
||||||
|
editAssetSegment.setVisible(state, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void newFolderMode(final PageState state) {
|
protected void newFolderMode(final PageState state) {
|
||||||
|
|
@ -533,6 +615,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
actionsSegment.setVisible(state, false);
|
actionsSegment.setVisible(state, false);
|
||||||
newFolderSegment.setVisible(state, true);
|
newFolderSegment.setVisible(state, true);
|
||||||
editFolderSegment.setVisible(state, false);
|
editFolderSegment.setVisible(state, false);
|
||||||
|
editAssetSegment.setVisible(state, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void editFolderMode(final PageState state) {
|
protected void editFolderMode(final PageState state) {
|
||||||
|
|
@ -542,6 +625,17 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
actionsSegment.setVisible(state, false);
|
actionsSegment.setVisible(state, false);
|
||||||
newFolderSegment.setVisible(state, false);
|
newFolderSegment.setVisible(state, false);
|
||||||
editFolderSegment.setVisible(state, true);
|
editFolderSegment.setVisible(state, true);
|
||||||
|
editAssetSegment.setVisible(state, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void editAssetMode(final PageState state) {
|
||||||
|
tree.setVisible(state, false);
|
||||||
|
browseSegment.setVisible(state, false);
|
||||||
|
targetSelector.setVisible(state, false);
|
||||||
|
actionsSegment.setVisible(state, false);
|
||||||
|
newFolderSegment.setVisible(state, false);
|
||||||
|
editFolderSegment.setVisible(state, false);
|
||||||
|
editAssetSegment.setVisible(state, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -560,9 +654,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
page.setVisibleDefault(actionsSegment, true);
|
page.setVisibleDefault(actionsSegment, true);
|
||||||
page.setVisibleDefault(newFolderSegment, false);
|
page.setVisibleDefault(newFolderSegment, false);
|
||||||
page.setVisibleDefault(editFolderSegment, false);
|
page.setVisibleDefault(editFolderSegment, false);
|
||||||
|
page.setVisibleDefault(editAssetSegment, false);
|
||||||
|
|
||||||
page.addComponentStateParam(this, actionParameter);
|
page.addComponentStateParam(this, actionParameter);
|
||||||
page.addComponentStateParam(this, sourcesParameter);
|
page.addComponentStateParam(this, sourcesParameter);
|
||||||
|
page.addComponentStateParam(this, selectedAssetTypeParam);
|
||||||
|
page.addComponentStateParam(this,
|
||||||
|
selectedAssetModel.getStateParameter());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -581,6 +679,10 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
return selectedAssetModel;
|
return selectedAssetModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected FolderSelectionModel getFolderSelectionModel() {
|
||||||
|
return folderSelectionModel;
|
||||||
|
}
|
||||||
|
|
||||||
private String[] getSources(final PageState state) {
|
private String[] getSources(final PageState state) {
|
||||||
|
|
||||||
final String[] result = (String[]) state.getValue(sourcesParameter);
|
final String[] result = (String[]) state.getValue(sourcesParameter);
|
||||||
|
|
@ -608,7 +710,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetFolderBrowserController controller = cdiUtil.findBean(
|
final AssetFolderBrowserController controller = cdiUtil.findBean(
|
||||||
AssetFolderBrowserController.class);
|
AssetFolderBrowserController.class);
|
||||||
|
|
||||||
controller.moveObjects(target, objectIds);
|
controller.moveObjects(target, objectIds);
|
||||||
}
|
}
|
||||||
|
|
@ -617,7 +719,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetFolderBrowserController controller = cdiUtil.findBean(
|
final AssetFolderBrowserController controller = cdiUtil.findBean(
|
||||||
AssetFolderBrowserController.class);
|
AssetFolderBrowserController.class);
|
||||||
|
|
||||||
controller.copyObjects(target, objectIds);
|
controller.copyObjects(target, objectIds);
|
||||||
}
|
}
|
||||||
|
|
@ -632,14 +734,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
if (!selectionModel.isSelected(state)) {
|
if (!selectionModel.isSelected(state)) {
|
||||||
final String folder = state
|
final String folder = state
|
||||||
.getRequest()
|
.getRequest()
|
||||||
.getParameter(SET_FOLDER);
|
.getParameter(SET_FOLDER);
|
||||||
|
|
||||||
if (folder == null) {
|
if (folder == null) {
|
||||||
final Category root = CMS
|
final Category root = CMS
|
||||||
.getContext()
|
.getContext()
|
||||||
.getContentSection()
|
.getContentSection()
|
||||||
.getRootAssetsFolder();
|
.getRootAssetsFolder();
|
||||||
final Long folderId = root.getObjectId();
|
final Long folderId = root.getObjectId();
|
||||||
|
|
||||||
selectionModel.setSelectedKey(state, folderId);
|
selectionModel.setSelectedKey(state, folderId);
|
||||||
|
|
@ -659,18 +761,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
final Category root = CMS
|
final Category root = CMS
|
||||||
.getContext()
|
.getContext()
|
||||||
.getContentSection()
|
.getContentSection()
|
||||||
.getRootAssetsFolder();
|
.getRootAssetsFolder();
|
||||||
|
|
||||||
if (!root.equals(folderRequestLocal.getFolder(state))) {
|
if (!root.equals(folderRequestLocal.getFolder(state))) {
|
||||||
// Expand the ancestor nodes of the currently
|
// Expand the ancestor nodes of the currently
|
||||||
// selected node.
|
// selected node.
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final FolderTreeModelController controller = cdiUtil.findBean(
|
final FolderTreeModelController controller = cdiUtil.findBean(
|
||||||
FolderTreeModelController.class);
|
FolderTreeModelController.class);
|
||||||
final List<Long> ancestorIds = controller.findAncestorIds(
|
final List<Long> ancestorIds = controller.findAncestorIds(
|
||||||
folderRequestLocal.getFolder(state));
|
folderRequestLocal.getFolder(state));
|
||||||
ancestorIds.forEach(id -> tree.expand(id.toString(), state));
|
ancestorIds.forEach(id -> tree.expand(id.toString(), state));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -692,8 +794,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
@Override
|
@Override
|
||||||
protected Long getRootFolderID(final PageState state) {
|
protected Long getRootFolderID(final PageState state) {
|
||||||
final ContentSection section = CMS
|
final ContentSection section = CMS
|
||||||
.getContext()
|
.getContext()
|
||||||
.getContentSection();
|
.getContentSection();
|
||||||
return section.getRootAssetsFolder().getObjectId();
|
return section.getRootAssetsFolder().getObjectId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -711,37 +813,37 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
final Label label = (Label) event.getTarget();
|
final Label label = (Label) event.getTarget();
|
||||||
final int numberOfItems = getSources(state).length;
|
final int numberOfItems = getSources(state).length;
|
||||||
final Category folder = (Category) folderSelectionModel
|
final Category folder = (Category) folderSelectionModel
|
||||||
.getSelectedObject(state);
|
.getSelectedObject(state);
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final CategoryManager categoryManager = cdiUtil
|
final CategoryManager categoryManager = cdiUtil
|
||||||
.findBean(CategoryManager.class);
|
.findBean(CategoryManager.class);
|
||||||
|
|
||||||
final String targetFolderPath;
|
final String targetFolderPath;
|
||||||
if (targetFolderModel.getSelectedObject(state) == null) {
|
if (targetFolderModel.getSelectedObject(state) == null) {
|
||||||
targetFolderPath = "";
|
targetFolderPath = "";
|
||||||
} else {
|
} else {
|
||||||
targetFolderPath = categoryManager.getCategoryPath(
|
targetFolderPath = categoryManager.getCategoryPath(
|
||||||
targetFolderModel.getSelectedObject(state));
|
targetFolderModel.getSelectedObject(state));
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
new Object[]{
|
new Object[]{
|
||||||
numberOfItems,
|
numberOfItems,
|
||||||
categoryManager.getCategoryPath(folder),
|
categoryManager.getCategoryPath(folder),
|
||||||
targetFolderPath
|
targetFolderPath
|
||||||
}));
|
}));
|
||||||
} else if (isCopy(state)) {
|
} else if (isCopy(state)) {
|
||||||
label.setLabel(new GlobalizedMessage(
|
label.setLabel(new GlobalizedMessage(
|
||||||
"cms.ui.folder.copy",
|
"cms.ui.folder.copy",
|
||||||
CMS_BUNDLE,
|
CMS_BUNDLE,
|
||||||
new Object[]{
|
new Object[]{
|
||||||
numberOfItems,
|
numberOfItems,
|
||||||
categoryManager.getCategoryPath(folder),
|
categoryManager.getCategoryPath(folder),
|
||||||
targetFolderPath
|
targetFolderPath
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -770,18 +872,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
if (folder != null) {
|
if (folder != null) {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final FolderManager folderManager = cdiUtil.findBean(
|
final FolderManager folderManager = cdiUtil.findBean(
|
||||||
FolderManager.class);
|
FolderManager.class);
|
||||||
if (!folderManager.getParentFolder(folder).isPresent()) {
|
if (!folderManager.getParentFolder(folder).isPresent()) {
|
||||||
folderTree.expand(Long.toString(folder.getObjectId()),
|
folderTree.expand(Long.toString(folder.getObjectId()),
|
||||||
state);
|
state);
|
||||||
} else {
|
} else {
|
||||||
final List<Folder> parents = folderManager
|
final List<Folder> parents = folderManager
|
||||||
.getParentFolders(folder);
|
.getParentFolders(folder);
|
||||||
parents
|
parents
|
||||||
.stream()
|
.stream()
|
||||||
.map(parent -> Long.toString(parent.getObjectId()))
|
.map(parent -> Long.toString(parent.getObjectId()))
|
||||||
.forEach(folderId -> folderTree.expand(folderId,
|
.forEach(folderId -> folderTree.expand(folderId,
|
||||||
state));
|
state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -806,7 +908,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
private class FolderTreeCellRenderer implements TreeCellRenderer {
|
private class FolderTreeCellRenderer implements TreeCellRenderer {
|
||||||
|
|
||||||
private final RequestLocal invalidFoldersRequestLocal
|
private final RequestLocal invalidFoldersRequestLocal
|
||||||
= new RequestLocal();
|
= new RequestLocal();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render the folders appropriately. The selected folder is a bold
|
* Render the folders appropriately. The selected folder is a bold
|
||||||
|
|
@ -830,18 +932,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
if (invalidFoldersRequestLocal.get(state) == null) {
|
if (invalidFoldersRequestLocal.get(state) == null) {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final AssetFolderBrowserController controller = cdiUtil
|
final AssetFolderBrowserController controller = cdiUtil
|
||||||
.findBean(AssetFolderBrowserController.class);
|
.findBean(AssetFolderBrowserController.class);
|
||||||
invalidFolders = controller.createInvalidTargetsList(
|
invalidFolders = controller.createInvalidTargetsList(
|
||||||
Arrays.asList(getSources(state)));
|
Arrays.asList(getSources(state)));
|
||||||
invalidFoldersRequestLocal.set(state, invalidFolders);
|
invalidFoldersRequestLocal.set(state, invalidFolders);
|
||||||
} else {
|
} else {
|
||||||
invalidFolders = (List<String>) invalidFoldersRequestLocal
|
invalidFolders = (List<String>) invalidFoldersRequestLocal
|
||||||
.get(state);
|
.get(state);
|
||||||
}
|
}
|
||||||
final Label label = new Label(value.toString());
|
final Label label = new Label(value.toString());
|
||||||
|
|
||||||
if (invalidFolders.contains(String.format(
|
if (invalidFolders.contains(String.format(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER + "%s", key))) {
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER + "%s", key))) {
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -857,11 +959,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TargetSelectorValidationListener
|
private class TargetSelectorValidationListener
|
||||||
implements FormValidationListener {
|
implements FormValidationListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate(final FormSectionEvent event)
|
public void validate(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
|
@ -873,24 +975,24 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
final FormData data = event.getFormData();
|
final FormData data = event.getFormData();
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
data.addError(new GlobalizedMessage(
|
data.addError(new GlobalizedMessage(
|
||||||
"cms.ui.folder.need_select_target_folder",
|
"cms.ui.folder.need_select_target_folder",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE));
|
CmsConstants.CMS_FOLDER_BUNDLE));
|
||||||
//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(folderSelectionModel.getSelectedObject(state))) {
|
if (target.equals(folderSelectionModel.getSelectedObject(state))) {
|
||||||
data.addError(new GlobalizedMessage(
|
data.addError(new GlobalizedMessage(
|
||||||
"cms.ui.folder.not_within_same_folder",
|
"cms.ui.folder.not_within_same_folder",
|
||||||
CmsConstants.CMS_FOLDER_BUNDLE));
|
CmsConstants.CMS_FOLDER_BUNDLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
// check create item permission
|
// check create item permission
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||||
PermissionChecker.class);
|
PermissionChecker.class);
|
||||||
if (!permissionChecker.isPermitted(
|
if (!permissionChecker.isPermitted(
|
||||||
ItemPrivileges.CREATE_NEW, target)) {
|
ItemPrivileges.CREATE_NEW, target)) {
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
@ -911,34 +1013,34 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final FolderRepository folderRepo = cdiUtil
|
final FolderRepository folderRepo = cdiUtil
|
||||||
.findBean(FolderRepository.class);
|
.findBean(FolderRepository.class);
|
||||||
final AssetRepository assetRepo = cdiUtil
|
final AssetRepository assetRepo = cdiUtil
|
||||||
.findBean(AssetRepository.class);
|
.findBean(AssetRepository.class);
|
||||||
final AssetManager assetManager = cdiUtil
|
final AssetManager assetManager = cdiUtil
|
||||||
.findBean(AssetManager.class);
|
.findBean(AssetManager.class);
|
||||||
final AssetFolderBrowserController controller = cdiUtil
|
final AssetFolderBrowserController controller = cdiUtil
|
||||||
.findBean(AssetFolderBrowserController.class);
|
.findBean(AssetFolderBrowserController.class);
|
||||||
final FolderManager folderManager = cdiUtil
|
final FolderManager folderManager = cdiUtil
|
||||||
.findBean(FolderManager.class);
|
.findBean(FolderManager.class);
|
||||||
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||||
PermissionChecker.class);
|
PermissionChecker.class);
|
||||||
|
|
||||||
final CcmObject object;
|
final CcmObject object;
|
||||||
final String name;
|
final String name;
|
||||||
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
||||||
|
|
||||||
final long folderId = Long.parseLong(objectId.substring(
|
final long folderId = Long.parseLong(objectId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
||||||
final Folder folder = folderRepo.findById(folderId).orElseThrow(
|
final Folder folder = folderRepo.findById(folderId).orElseThrow(
|
||||||
() -> new IllegalArgumentException(String.format(
|
() -> new IllegalArgumentException(String.format(
|
||||||
"No folder with id %d in database.", folderId)));
|
"No folder with id %d in database.", folderId)));
|
||||||
|
|
||||||
name = folder.getName();
|
name = folder.getName();
|
||||||
|
|
||||||
//Check if folder or subfolder contains in use assets
|
//Check if folder or subfolder contains in use assets
|
||||||
if (isMove(state)) {
|
if (isMove(state)) {
|
||||||
final FolderManager.FolderIsMovable movable = folderManager
|
final FolderManager.FolderIsMovable movable = folderManager
|
||||||
.folderIsMovable(folder, target);
|
.folderIsMovable(folder, target);
|
||||||
switch (movable) {
|
switch (movable) {
|
||||||
case DIFFERENT_SECTIONS:
|
case DIFFERENT_SECTIONS:
|
||||||
addErrorMessage(data,
|
addErrorMessage(data,
|
||||||
|
|
@ -970,23 +1072,23 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new UnexpectedErrorException(String.format(
|
throw new UnexpectedErrorException(String.format(
|
||||||
"Unknown state '%s' for '%s'.",
|
"Unknown state '%s' for '%s'.",
|
||||||
movable,
|
movable,
|
||||||
FolderManager.FolderIsMovable.class.
|
FolderManager.FolderIsMovable.class.
|
||||||
getName()));
|
getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object = folder;
|
object = folder;
|
||||||
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
|
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
|
||||||
final long assetId = Long.parseLong(objectId.substring(
|
final long assetId = Long.parseLong(objectId.substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_ASSET.length()));
|
FOLDER_BROWSER_KEY_PREFIX_ASSET.length()));
|
||||||
final Asset asset = assetRepo
|
final Asset asset = assetRepo
|
||||||
.findById(assetId)
|
.findById(assetId)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(
|
.orElseThrow(() -> new IllegalArgumentException(
|
||||||
String.format(
|
String.format(
|
||||||
"No asset with id %d in the database.",
|
"No asset with id %d in the database.",
|
||||||
assetId)));
|
assetId)));
|
||||||
|
|
||||||
name = asset.getDisplayName();
|
name = asset.getDisplayName();
|
||||||
|
|
||||||
|
|
@ -997,11 +1099,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
object = asset;
|
object = asset;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"Provided objectId '%s' does not start with '%s' "
|
"Provided objectId '%s' does not start with '%s' "
|
||||||
+ "or '%s'.",
|
+ "or '%s'.",
|
||||||
objectId,
|
objectId,
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
|
||||||
FOLDER_BROWSER_KEY_PREFIX_ASSET));
|
FOLDER_BROWSER_KEY_PREFIX_ASSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
final long count = controller.countObjects(target, name);
|
final long count = controller.countObjects(target, name);
|
||||||
|
|
@ -1013,7 +1115,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
|
|
||||||
if (!(permissionChecker.isPermitted(
|
if (!(permissionChecker.isPermitted(
|
||||||
ItemPrivileges.DELETE, object))
|
ItemPrivileges.DELETE, object))
|
||||||
&& isMove(state)) {
|
&& isMove(state)) {
|
||||||
addErrorMessage(data,
|
addErrorMessage(data,
|
||||||
"cms.ui.folder.no_permission_for_item",
|
"cms.ui.folder.no_permission_for_item",
|
||||||
object.getDisplayName());
|
object.getDisplayName());
|
||||||
|
|
@ -1040,8 +1142,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
@Override
|
@Override
|
||||||
protected Folder getRootFolder(final PageState state) {
|
protected Folder getRootFolder(final PageState state) {
|
||||||
final ContentSection section = CMS
|
final ContentSection section = CMS
|
||||||
.getContext()
|
.getContext()
|
||||||
.getContentSection();
|
.getContentSection();
|
||||||
|
|
||||||
return section.getRootAssetsFolder();
|
return section.getRootAssetsFolder();
|
||||||
}
|
}
|
||||||
|
|
@ -1055,9 +1157,9 @@ public class AssetPane extends LayoutPanel implements Resettable {
|
||||||
if (key instanceof String) {
|
if (key instanceof String) {
|
||||||
final Long keyAsLong;
|
final Long keyAsLong;
|
||||||
if (((String) key).startsWith(
|
if (((String) key).startsWith(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
|
||||||
keyAsLong = Long.parseLong(((String) key).substring(
|
keyAsLong = Long.parseLong(((String) key).substring(
|
||||||
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
|
||||||
} else {
|
} else {
|
||||||
keyAsLong = Long.parseLong((String) key);
|
keyAsLong = Long.parseLong((String) key);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,6 @@ import org.librecms.contentsection.Asset;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -58,8 +56,8 @@ public class BookmarkForm extends AssetForm {
|
||||||
protected void addWidgets() {
|
protected void addWidgets() {
|
||||||
|
|
||||||
add(new Label(
|
add(new Label(
|
||||||
new GlobalizedMessage("cms.ui.assets.bookmark.description",
|
new GlobalizedMessage("cms.ui.assets.bookmark.description",
|
||||||
CmsConstants.CMS_BUNDLE)));
|
CmsConstants.CMS_BUNDLE)));
|
||||||
description = new TextArea("bookmark-description");
|
description = new TextArea("bookmark-description");
|
||||||
add(description);
|
add(description);
|
||||||
|
|
||||||
|
|
@ -72,7 +70,7 @@ public class BookmarkForm extends AssetForm {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate(final FormSectionEvent event)
|
public void validate(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final FormData data = event.getFormData();
|
final FormData data = event.getFormData();
|
||||||
|
|
@ -81,8 +79,8 @@ public class BookmarkForm extends AssetForm {
|
||||||
new URL((String) url.getValue(state));
|
new URL((String) url.getValue(state));
|
||||||
} catch (MalformedURLException ex) {
|
} catch (MalformedURLException ex) {
|
||||||
data.addError(new GlobalizedMessage(
|
data.addError(new GlobalizedMessage(
|
||||||
"cms.ui.assets.bookmark.url.malformed",
|
"cms.ui.assets.bookmark.url.malformed",
|
||||||
CmsConstants.CMS_BUNDLE));
|
CmsConstants.CMS_BUNDLE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,58 +90,45 @@ public class BookmarkForm extends AssetForm {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Asset createAsset(final PageState state)
|
protected Asset createAsset(final PageState state)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
Objects.requireNonNull(state);
|
Objects.requireNonNull(state);
|
||||||
|
|
||||||
final Bookmark bookmark = new Bookmark();
|
final Bookmark bookmark = new Bookmark();
|
||||||
|
|
||||||
bookmark
|
bookmark
|
||||||
.getDescription()
|
.getDescription()
|
||||||
.addValue(KernelConfig.getConfig().getDefaultLocale(),
|
.addValue(KernelConfig.getConfig().getDefaultLocale(),
|
||||||
(String) description.getValue(state));
|
(String) description.getValue(state));
|
||||||
|
|
||||||
try {
|
bookmark.setUrl((String) url.getValue(state));
|
||||||
bookmark.setUrl(new URL((String) url.getValue(state)));
|
|
||||||
} catch (MalformedURLException ex) {
|
|
||||||
throw new FormProcessException(new GlobalizedMessage(
|
|
||||||
"cms.ui.assets.bookmark.url.malformed",
|
|
||||||
CmsConstants.CMS_BUNDLE));
|
|
||||||
}
|
|
||||||
|
|
||||||
return bookmark;
|
return bookmark;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateAsset(final Asset asset, final PageState state)
|
protected void updateAsset(final Asset asset, final PageState state)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
Objects.requireNonNull(asset);
|
Objects.requireNonNull(asset);
|
||||||
Objects.requireNonNull(state);
|
Objects.requireNonNull(state);
|
||||||
|
|
||||||
if (!(asset instanceof Bookmark)) {
|
if (!(asset instanceof Bookmark)) {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"Provided asset is not an instance of class (or sub class of) "
|
"Provided asset is not an instance of class (or sub class of) "
|
||||||
+ "'%s' but is an instance of class '%s'",
|
+ "'%s' but is an instance of class '%s'",
|
||||||
Bookmark.class.getName(),
|
Bookmark.class.getName(),
|
||||||
asset.getClass().getName()));
|
asset.getClass().getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
final Bookmark bookmark = (Bookmark) asset;
|
final Bookmark bookmark = (Bookmark) asset;
|
||||||
|
|
||||||
bookmark
|
bookmark
|
||||||
.getDescription()
|
.getDescription()
|
||||||
.addValue(KernelConfig.getConfig().getDefaultLocale(),
|
.addValue(KernelConfig.getConfig().getDefaultLocale(),
|
||||||
(String) description.getValue(state));
|
(String) description.getValue(state));
|
||||||
|
|
||||||
try {
|
|
||||||
bookmark.setUrl(new URL((String) url.getValue(state)));
|
|
||||||
} catch (MalformedURLException ex) {
|
|
||||||
throw new FormProcessException(new GlobalizedMessage(
|
|
||||||
"cms.ui.assets.bookmark.url.malformed",
|
|
||||||
CmsConstants.CMS_BUNDLE));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
bookmark.setUrl((String) url.getValue(state));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,26 +51,35 @@ public class LegalMetadataForm extends AssetForm {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void addWidgets() {
|
protected void addWidgets() {
|
||||||
add(new Label(new GlobalizedMessage(
|
|
||||||
"cms.ui.assets.legalmetadata.rightsholder",
|
|
||||||
CmsConstants.CMS_BUNDLE)));
|
|
||||||
|
|
||||||
|
add(new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.assets.legalmetadata.rightsholder",
|
||||||
|
CmsConstants.CMS_BUNDLE)));
|
||||||
rightsHolder = new TextArea("legalmetadata-rightsholder");
|
rightsHolder = new TextArea("legalmetadata-rightsholder");
|
||||||
add(rightsHolder);
|
add(rightsHolder);
|
||||||
|
|
||||||
|
add(new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.assets.legalmetadata.rights",
|
||||||
|
CmsConstants.CMS_BUNDLE)));
|
||||||
rights = new TextArea("legalmetadata-rights");
|
rights = new TextArea("legalmetadata-rights");
|
||||||
add(rights);
|
add(rights);
|
||||||
|
|
||||||
|
add(new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.assets.legalmetadata.publisher",
|
||||||
|
CmsConstants.CMS_BUNDLE)));
|
||||||
publisher = new TextArea("legalmetadata-rights");
|
publisher = new TextArea("legalmetadata-rights");
|
||||||
add(publisher);
|
add(publisher);
|
||||||
|
|
||||||
|
add(new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.assets.legalmetadata.creator",
|
||||||
|
CmsConstants.CMS_BUNDLE)));
|
||||||
creator = new TextArea("legalmetadata-creator");
|
creator = new TextArea("legalmetadata-creator");
|
||||||
add(creator);
|
add(creator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Asset createAsset(final PageState state)
|
protected Asset createAsset(final PageState state)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
Objects.requireNonNull(state);
|
Objects.requireNonNull(state);
|
||||||
|
|
||||||
|
|
@ -78,8 +87,8 @@ public class LegalMetadataForm extends AssetForm {
|
||||||
|
|
||||||
legalMetadata.setRightsHolder((String) rightsHolder.getValue(state));
|
legalMetadata.setRightsHolder((String) rightsHolder.getValue(state));
|
||||||
legalMetadata.getRights().addValue(
|
legalMetadata.getRights().addValue(
|
||||||
KernelConfig.getConfig().getDefaultLocale(),
|
KernelConfig.getConfig().getDefaultLocale(),
|
||||||
(String) rights.getValue(state));
|
(String) rights.getValue(state));
|
||||||
|
|
||||||
legalMetadata.setPublisher((String) publisher.getValue(state));
|
legalMetadata.setPublisher((String) publisher.getValue(state));
|
||||||
legalMetadata.setCreator((String) creator.getValue(state));
|
legalMetadata.setCreator((String) creator.getValue(state));
|
||||||
|
|
@ -89,25 +98,25 @@ public class LegalMetadataForm extends AssetForm {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateAsset(final Asset asset, final PageState state)
|
protected void updateAsset(final Asset asset, final PageState state)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
|
|
||||||
Objects.requireNonNull(asset);
|
Objects.requireNonNull(asset);
|
||||||
Objects.requireNonNull(state);
|
Objects.requireNonNull(state);
|
||||||
|
|
||||||
if (!(asset instanceof LegalMetadata)) {
|
if (!(asset instanceof LegalMetadata)) {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"Provided asset is not an instance of '%s' (or a sub class) "
|
"Provided asset is not an instance of '%s' (or a sub class) "
|
||||||
+ "but is an instance of class '%s'.",
|
+ "but is an instance of class '%s'.",
|
||||||
LegalMetadata.class.getName(),
|
LegalMetadata.class.getName(),
|
||||||
asset.getClass().getName()));
|
asset.getClass().getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
final LegalMetadata legalMetadata = (LegalMetadata) asset;
|
final LegalMetadata legalMetadata = (LegalMetadata) asset;
|
||||||
|
|
||||||
legalMetadata.setRightsHolder((String) rightsHolder.getValue(state));
|
legalMetadata.setRightsHolder((String) rightsHolder.getValue(state));
|
||||||
legalMetadata.getRights().addValue(
|
legalMetadata.getRights().addValue(
|
||||||
KernelConfig.getConfig().getDefaultLocale(),
|
KernelConfig.getConfig().getDefaultLocale(),
|
||||||
(String) rights.getValue(state));
|
(String) rights.getValue(state));
|
||||||
|
|
||||||
legalMetadata.setPublisher((String) publisher.getValue(state));
|
legalMetadata.setPublisher((String) publisher.getValue(state));
|
||||||
legalMetadata.setCreator((String) creator.getValue(state));
|
legalMetadata.setCreator((String) creator.getValue(state));
|
||||||
|
|
|
||||||
|
|
@ -58,15 +58,15 @@ public class AssetTypesManager {
|
||||||
protected void initialize() {
|
protected void initialize() {
|
||||||
|
|
||||||
final ServiceLoader<CcmModule> modules = ServiceLoader
|
final ServiceLoader<CcmModule> modules = ServiceLoader
|
||||||
.load(CcmModule.class);
|
.load(CcmModule.class);
|
||||||
|
|
||||||
final SortedSet<Class<? extends Asset>> assetTypes = new TreeSet<>(
|
final SortedSet<Class<? extends Asset>> assetTypes = new TreeSet<>(
|
||||||
(type1, type2) -> type1.getName().compareTo(type2.getName()));
|
(type1, type2) -> type1.getName().compareTo(type2.getName()));
|
||||||
|
|
||||||
for (final CcmModule module : modules) {
|
for (final CcmModule module : modules) {
|
||||||
final AssetTypes annotation = module
|
final AssetTypes annotation = module
|
||||||
.getClass()
|
.getClass()
|
||||||
.getAnnotation(AssetTypes.class);
|
.getAnnotation(AssetTypes.class);
|
||||||
|
|
||||||
if (annotation == null) {
|
if (annotation == null) {
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -76,22 +76,22 @@ public class AssetTypesManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
availableAssetTypes = assetTypes
|
availableAssetTypes = assetTypes
|
||||||
.stream()
|
.stream()
|
||||||
.filter(type -> type.getAnnotation(AssetType.class) != null)
|
.filter(type -> type.getAnnotation(AssetType.class) != null)
|
||||||
.map(assetTypeClass -> createAssetTypeInfo(assetTypeClass))
|
.map(assetTypeClass -> createAssetTypeInfo(assetTypeClass))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method for creating the info object for a asset type.
|
* Helper method for creating the info object for a asset type.
|
||||||
*
|
*
|
||||||
* @param assetTypeClass The class which provides the implementation of the
|
* @param assetTypeClass The class which provides the implementation of the
|
||||||
* asset type.
|
* asset type.
|
||||||
*
|
*
|
||||||
* @return A {@link AssetTypeInfo} object describing the asset type.
|
* @return A {@link AssetTypeInfo} object describing the asset type.
|
||||||
*/
|
*/
|
||||||
private AssetTypeInfo createAssetTypeInfo(
|
private AssetTypeInfo createAssetTypeInfo(
|
||||||
final Class<? extends Asset> assetTypeClass) {
|
final Class<? extends Asset> assetTypeClass) {
|
||||||
|
|
||||||
Objects.requireNonNull(assetTypeClass);
|
Objects.requireNonNull(assetTypeClass);
|
||||||
|
|
||||||
|
|
@ -101,7 +101,7 @@ public class AssetTypesManager {
|
||||||
final String defaultBundleName = String.format("%sBundle",
|
final String defaultBundleName = String.format("%sBundle",
|
||||||
assetTypeClass.getName());
|
assetTypeClass.getName());
|
||||||
final AssetType assetType = assetTypeClass
|
final AssetType assetType = assetTypeClass
|
||||||
.getAnnotation(AssetType.class);
|
.getAnnotation(AssetType.class);
|
||||||
|
|
||||||
if (assetType == null) {
|
if (assetType == null) {
|
||||||
assetTypeInfo.setLabelBundle(defaultBundleName);
|
assetTypeInfo.setLabelBundle(defaultBundleName);
|
||||||
|
|
@ -156,7 +156,7 @@ public class AssetTypesManager {
|
||||||
* @return A {@link AssetTypeInfo} object describing the asset type.
|
* @return A {@link AssetTypeInfo} object describing the asset type.
|
||||||
*/
|
*/
|
||||||
public AssetTypeInfo getAssetTypeInfo(
|
public AssetTypeInfo getAssetTypeInfo(
|
||||||
final Class<? extends Asset> assetTypeClass) {
|
final Class<? extends Asset> assetTypeClass) {
|
||||||
|
|
||||||
Objects.requireNonNull(assetTypeClass);
|
Objects.requireNonNull(assetTypeClass);
|
||||||
|
|
||||||
|
|
@ -168,13 +168,12 @@ public class AssetTypesManager {
|
||||||
* asset type.
|
* asset type.
|
||||||
*
|
*
|
||||||
* @param assetTypeClass The fully qualified name of the class representing
|
* @param assetTypeClass The fully qualified name of the class representing
|
||||||
* the asset type.
|
* the asset type.
|
||||||
*
|
*
|
||||||
* @return A {@link AssetTypeInfo} object describing the asset type.
|
* @return A {@link AssetTypeInfo} object describing the asset type.
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException If no class with the provided name
|
* @throws IllegalArgumentException If no class with the provided name
|
||||||
* exists or the class is not a subclass of
|
* exists or the class is not a subclass of {@link Asset}.
|
||||||
* {@link Asset}.
|
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public AssetTypeInfo getAssetTypeInfo(final String assetTypeClass) {
|
public AssetTypeInfo getAssetTypeInfo(final String assetTypeClass) {
|
||||||
|
|
@ -186,15 +185,15 @@ public class AssetTypesManager {
|
||||||
clazz = Class.forName(assetTypeClass);
|
clazz = Class.forName(assetTypeClass);
|
||||||
} catch (ClassNotFoundException ex) {
|
} catch (ClassNotFoundException ex) {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"There is not class \"%s\".", assetTypeClass),
|
"There is no class \"%s\".", assetTypeClass),
|
||||||
ex);
|
ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Asset.class.isAssignableFrom(clazz)) {
|
if (!Asset.class.isAssignableFrom(clazz)) {
|
||||||
throw new IllegalArgumentException(String.format(
|
throw new IllegalArgumentException(String.format(
|
||||||
"Class \"%s\" is not a subclass of of \"%s\".",
|
"Class \"%s\" is not a subclass of of \"%s\".",
|
||||||
assetTypeClass,
|
assetTypeClass,
|
||||||
Asset.class.getName()));
|
Asset.class.getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return getAssetTypeInfo((Class<? extends Asset>) clazz);
|
return getAssetTypeInfo((Class<? extends Asset>) clazz);
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ public class Bookmark extends Asset implements Serializable {
|
||||||
|
|
||||||
@Column(name = "URL", length = 2048, nullable = false)
|
@Column(name = "URL", length = 2048, nullable = false)
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private URL url;
|
private String url;
|
||||||
|
|
||||||
public Bookmark() {
|
public Bookmark() {
|
||||||
super();
|
super();
|
||||||
|
|
@ -88,11 +88,11 @@ public class Bookmark extends Asset implements Serializable {
|
||||||
this.description = description;
|
this.description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public URL getUrl() {
|
public String getUrl() {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUrl(final URL url) {
|
public void setUrl(final String url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,7 @@ public class AssetRepository
|
||||||
@RequiresPrivilege(AssetPrivileges.EDIT)
|
@RequiresPrivilege(AssetPrivileges.EDIT)
|
||||||
final Asset asset) {
|
final Asset asset) {
|
||||||
|
|
||||||
|
super.save(asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -248,3 +248,7 @@ cms.ui.assets=Assets
|
||||||
cms.ui.folder.no_assets=No assets
|
cms.ui.folder.no_assets=No assets
|
||||||
cms.ui.assets.new=Create new asset
|
cms.ui.assets.new=Create new asset
|
||||||
cms.ui.assets.new.create=Create asset
|
cms.ui.assets.new.create=Create asset
|
||||||
|
cms.ui.asset.title=Title
|
||||||
|
cms.ui.admin.assets.create=Create new asset
|
||||||
|
cms.ui.assets.bookmark.description=Description
|
||||||
|
cms.ui.assets.bookmark.url=URL
|
||||||
|
|
|
||||||
|
|
@ -247,3 +247,7 @@ cms.ui.assets=Medien & Daten
|
||||||
cms.ui.folder.no_assets=Keine Medien oder Datens\u00e4tze vorhanden
|
cms.ui.folder.no_assets=Keine Medien oder Datens\u00e4tze vorhanden
|
||||||
cms.ui.assets.new=Neues Asset anlegen
|
cms.ui.assets.new=Neues Asset anlegen
|
||||||
cms.ui.assets.new.create=Asset anlegen
|
cms.ui.assets.new.create=Asset anlegen
|
||||||
|
cms.ui.asset.title=Titel
|
||||||
|
cms.ui.admin.assets.create=Neues Asset anlegen
|
||||||
|
cms.ui.assets.bookmark.description=Beschreibung
|
||||||
|
cms.ui.assets.bookmark.url=URL
|
||||||
|
|
|
||||||
|
|
@ -206,3 +206,7 @@ cms.ui.assets=Assets
|
||||||
cms.ui.folder.no_assets=No assets
|
cms.ui.folder.no_assets=No assets
|
||||||
cms.ui.assets.new=Create new asset
|
cms.ui.assets.new=Create new asset
|
||||||
cms.ui.assets.new.create=Create asset
|
cms.ui.assets.new.create=Create asset
|
||||||
|
cms.ui.asset.title=Title
|
||||||
|
cms.ui.admin.assets.create=Create new asset
|
||||||
|
cms.ui.assets.bookmark.description=Description
|
||||||
|
cms.ui.assets.bookmark.url=URL
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue