Removed PageModel usage from Page entity.

pull/10/head
Jens Pelzetter 2021-11-16 19:56:06 +01:00
parent fa8b63c444
commit 2c7208818f
7 changed files with 169 additions and 125 deletions

View File

@ -340,25 +340,25 @@ public class PagesAdminPage extends CMSApplicationPage {
if (page.isPresent()) { if (page.isPresent()) {
if (page.get().getIndexPageModel() == null) { // if (page.get().getIndexPageModel() == null) {
indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL); // indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
} else { // } else {
indexPageModelSelect.setValue(state, // indexPageModelSelect.setValue(state,
Long.toString(page // Long.toString(page
.get() // .get()
.getIndexPageModel() // .getIndexPageModel()
.getPageModelId())); // .getPageModelId()));
} // }
//
if (page.get().getItemPageModel() == null) { // if (page.get().getItemPageModel() == null) {
itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL); // itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
} else { // } else {
itemPageModelSelect.setValue(state, // itemPageModelSelect.setValue(state,
Long.toString(page // Long.toString(page
.get() // .get()
.getItemPageModel() // .getItemPageModel()
.getPageModelId())); // .getPageModelId()));
} // }
} else { } else {
indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL); indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL); itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
@ -405,23 +405,23 @@ public class PagesAdminPage extends CMSApplicationPage {
final String selectedItemPageModelId = data final String selectedItemPageModelId = data
.getString(ITEM_PAGE_MODEL_SELECT); .getString(ITEM_PAGE_MODEL_SELECT);
if (!INHERIT_PAGEMODEL.equals(selectedIndexPageModelId)) { // if (!INHERIT_PAGEMODEL.equals(selectedIndexPageModelId)) {
final PageModel model = pageModelRepo // final PageModel model = pageModelRepo
.findById(Long.parseLong(selectedIndexPageModelId)) // .findById(Long.parseLong(selectedIndexPageModelId))
.orElseThrow(() -> new UnexpectedErrorException(String // .orElseThrow(() -> new UnexpectedErrorException(String
.format("No PageModel with ID %s in the database.", // .format("No PageModel with ID %s in the database.",
selectedIndexPageModelId))); // selectedIndexPageModelId)));
page.setIndexPageModel(model); // page.setIndexPageModel(model);
} // }
//
if (!INHERIT_PAGEMODEL.equals(selectedItemPageModelId)) { // if (!INHERIT_PAGEMODEL.equals(selectedItemPageModelId)) {
final PageModel model = pageModelRepo // final PageModel model = pageModelRepo
.findById(Long.parseLong(selectedItemPageModelId)) // .findById(Long.parseLong(selectedItemPageModelId))
.orElseThrow(() -> new UnexpectedErrorException(String // .orElseThrow(() -> new UnexpectedErrorException(String
.format("No PageModel with ID %s in the database.", // .format("No PageModel with ID %s in the database.",
selectedItemPageModelId))); // selectedItemPageModelId)));
page.setItemPageModel(model); // page.setItemPageModel(model);
} // }
pageRepo.save(page); pageRepo.save(page);
} }

View File

@ -19,7 +19,6 @@
package org.librecms.pages; package org.librecms.pages;
import org.libreccm.core.CcmObject; import org.libreccm.core.CcmObject;
import org.libreccm.pagemodel.PageModel;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections; import java.util.Collections;
@ -27,12 +26,12 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import javax.persistence.CollectionTable; import javax.persistence.CollectionTable;
import javax.persistence.ElementCollection; import javax.persistence.ElementCollection;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MapKeyColumn; import javax.persistence.MapKeyColumn;
import javax.persistence.NamedQueries; import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery; import javax.persistence.NamedQuery;
@ -42,7 +41,8 @@ import static org.librecms.CmsConstants.*;
import static org.librecms.pages.PagesConstants.*; import static org.librecms.pages.PagesConstants.*;
/** /**
* A CMS page is a container which contains several data how a page is displayed. * A CMS page is a container which contains several data how a page is
* displayed.
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
@ -62,69 +62,80 @@ public class Page extends CcmObject implements Serializable {
private static final long serialVersionUID = 5108486858438122008L; private static final long serialVersionUID = 5108486858438122008L;
/**
* The page model for the index item of the associated category.
*/
@ManyToOne
@JoinColumn(name = "INDEX_PAGE_MODEL_ID")
private PageModel indexPageModel;
/**
* The page model for other items in the associated category.
*/
@ManyToOne
@JoinColumn(name = "ITEM_PAGE_MODEL_ID")
private PageModel itemPageModel;
/** /**
* The configurations for this page. * The configurations for this page.
*/ */
@ElementCollection @ElementCollection
@CollectionTable(name = "PAGE_THEME_CONFIGURATIONS", @CollectionTable(
name = "PAGE_THEME_CONFIGURATIONS",
schema = DB_SCHEMA, schema = DB_SCHEMA,
joinColumns = { joinColumns = {
@JoinColumn(name = "PAGE_ID") @JoinColumn(name = "PAGE_ID")
}) }
)
@MapKeyColumn(name = "THEME") @MapKeyColumn(name = "THEME")
private Map<String, ThemeConfiguration> themeConfiguration; private Map<String, ThemeConfiguration> themeConfiguration;
public PageModel getIndexPageModel() { /**
return indexPageModel; * Additional properties for the view/the theme
*/
@ElementCollection
@CollectionTable(
name = "PAGE_PROPERTIES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PAGE_ID")
} }
)
@MapKeyColumn(name = "PROPERTY_NAME")
private Map<String, String> properties;
public void setIndexPageModel(final PageModel indexPageModel) { public Page() {
this.indexPageModel = indexPageModel; themeConfiguration = new HashMap<>();
} properties = new HashMap<>();
public PageModel getItemPageModel() {
return itemPageModel;
}
public void setItemPageModel(final PageModel itemPageModel) {
this.itemPageModel = itemPageModel;
} }
public Map<String, ThemeConfiguration> getThemeConfiguration() { public Map<String, ThemeConfiguration> getThemeConfiguration() {
return Collections.unmodifiableMap(themeConfiguration); return Optional
.ofNullable(themeConfiguration)
.map(Collections::unmodifiableMap)
.orElse(null);
} }
public void setThemeConfiguration( public void setThemeConfiguration(
final Map<String, ThemeConfiguration> themeConfiguration) { final Map<String, ThemeConfiguration> themeConfiguration
) {
this.themeConfiguration = new HashMap<>(themeConfiguration); this.themeConfiguration = Optional
.ofNullable(themeConfiguration)
.map(conf -> new HashMap<>(conf))
.orElse(null);
}
public Map<String, String> getProperties() {
return Optional
.ofNullable(properties)
.map(Collections::unmodifiableMap)
.orElse(null);
}
public void setProperties(final Map<String, String> properties) {
this.properties = Optional
.ofNullable(properties)
.map(props -> new HashMap<>(props))
.orElse(null);
} }
@Override @Override
public int hashCode() { public int hashCode() {
int hash = 7; int hash = 7;
hash = 47 * hash + Objects.hashCode(indexPageModel);
hash = 47 * hash + Objects.hashCode(itemPageModel);
hash = 47 * hash + Objects.hashCode(themeConfiguration); hash = 47 * hash + Objects.hashCode(themeConfiguration);
hash = 47 * hash + Objects.hashCode(properties);
return hash; return hash;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
if (this == obj) { if (this == obj) {
return true; return true;
} }
@ -138,13 +149,12 @@ public class Page extends CcmObject implements Serializable {
if (!other.canEqual(this)) { if (!other.canEqual(this)) {
return false; return false;
} }
if (!Objects.equals(indexPageModel, other.getIndexPageModel())) { if (!Objects.equals(properties, other.getProperties())) {
return false; return false;
} }
if (!Objects.equals(itemPageModel, other.getItemPageModel())) { return Objects.equals(
return false; themeConfiguration, other.getThemeConfiguration()
} );
return Objects.equals(themeConfiguration, other.getThemeConfiguration());
} }
@Override @Override
@ -154,13 +164,15 @@ public class Page extends CcmObject implements Serializable {
@Override @Override
public String toString(final String data) { public String toString(final String data) {
return super.toString(String.format(", indexPageModel = %s, " return super.toString(
+ "itemPageModel = %s, " String.format(
+ "themeConfiguration = %s%s", ", themeConfiguration = %s,"
Objects.toString(indexPageModel), + "properties = %s%s",
Objects.toString(itemPageModel),
Objects.toString(themeConfiguration), Objects.toString(themeConfiguration),
data)); Objects.toString(properties),
data
)
);
} }
} }

View File

@ -723,22 +723,23 @@ public class PagesRouter {
language, language,
parameters); parameters);
final PageModel pageModel; // final PageModel pageModel;
if (pageModelVersion == PageModelVersion.DRAFT) { // if (pageModelVersion == PageModelVersion.DRAFT) {
pageModel = pageModelManager // pageModel = pageModelManager
.getDraftVersion(page.getIndexPageModel()); // .getDraftVersion(page.getIndexPageModel());
} else { // } else {
pageModel = pageModelManager // pageModel = pageModelManager
.getLiveVersion(page.getIndexPageModel()) // .getLiveVersion(page.getIndexPageModel())
.orElseThrow(() -> new NotFoundException(String // .orElseThrow(() -> new NotFoundException(String
.format("The PageModel for the index page of the category" // .format("The PageModel for the index page of the category"
+ "\"%s\" is not available as live version.", // + "\"%s\" is not available as live version.",
pagePath))); // pagePath)));
} // }
//
parameters.put(PARAMETER_LANGUAGE, language); // parameters.put(PARAMETER_LANGUAGE, language);
//
return buildPage(pageModel, parameters); // return buildPage(pageModel, parameters);
throw new UnsupportedOperationException();
} }
private Map<String, Object> getCategoryItemPage( private Map<String, Object> getCategoryItemPage(
@ -752,23 +753,24 @@ public class PagesRouter {
final Page page = PagesRouter.this.getPage(uriInfo, pagePath, language, final Page page = PagesRouter.this.getPage(uriInfo, pagePath, language,
parameters); parameters);
final PageModel pageModel; // final PageModel pageModel;
if (pageModelVersion == PageModelVersion.DRAFT) { // if (pageModelVersion == PageModelVersion.DRAFT) {
pageModel = pageModelManager.getDraftVersion(page // pageModel = pageModelManager.getDraftVersion(page
.getItemPageModel()); // .getItemPageModel());
} else { // } else {
pageModel = pageModelManager // pageModel = pageModelManager
.getLiveVersion(page.getItemPageModel()) // .getLiveVersion(page.getItemPageModel())
.orElseThrow(() -> new NotFoundException(String // .orElseThrow(() -> new NotFoundException(String
.format("The PageModel for the index page of the category" // .format("The PageModel for the index page of the category"
+ "\"%s\" is not available as live version.", // + "\"%s\" is not available as live version.",
pagePath))); // pagePath)));
} // }
//
parameters.put(PARAMETER_ITEMNAME, itemName); // parameters.put(PARAMETER_ITEMNAME, itemName);
parameters.put(PARAMETER_LANGUAGE, language); // parameters.put(PARAMETER_LANGUAGE, language);
//
return buildPage(pageModel, parameters); // return buildPage(pageModel, parameters);
throw new UnsupportedOperationException();
} }
private List<Map<String, Object>> buildPageCategoriesPath( private List<Map<String, Object>> buildPageCategoriesPath(

View File

@ -0,0 +1,4 @@
alter table ccm_cms.pages drop column index_page_model;
alter table ccm_cms.pages drop column item_page_model;
alter table ccm_cms.pages drop constraint FKqweb08d151ot4ij9io72w3yhx;
alter table ccm_cms.pages drop constraint FKg2p2ahbayc2coei72pk1lnenf;

View File

@ -0,0 +1,11 @@
create table CCM_CMS.PAGE_PROPERTIES (
PAGE_ID bigint not null,
properties varchar(255),
PROPERTY_NAME varchar(255) not null,
primary key (PAGE_ID, PROPERTY_NAME)
);
alter table CCM_CMS.PAGE_PROPERTIES
add constraint FKgvy9owhgeeyicnesuqf3t059x
foreign key (PAGE_ID)
references CCM_CMS.PAGES;

View File

@ -0,0 +1,4 @@
alter table ccm_cms.pages drop column index_page_model;
alter table ccm_cms.pages drop column item_page_model;
alter table ccm_cms.pages drop constraint FKqweb08d151ot4ij9io72w3yhx;
alter table ccm_cms.pages drop constraint FKg2p2ahbayc2coei72pk1lnenf;

View File

@ -0,0 +1,11 @@
create table CCM_CMS.PAGE_PROPERTIES (
PAGE_ID int8 not null,
properties varchar(255),
PROPERTY_NAME varchar(255) not null,
primary key (PAGE_ID, PROPERTY_NAME)
);
alter table CCM_CMS.PAGE_PROPERTIES
add constraint FKgvy9owhgeeyicnesuqf3t059x
foreign key (PAGE_ID)
references CCM_CMS.PAGES;