PL-5393 Category attribute code should be unique for the certain entity type

#PL-5393
This commit is contained in:
Eugeny Degtyarjov 2015-05-14 08:47:41 +00:00
parent e287725c0a
commit 0ef9872c0e
12 changed files with 88 additions and 5 deletions

View File

@ -669,8 +669,9 @@ create table SYS_CATEGORY_ATTR(
DELETE_TS timestamp,
DELETED_BY varchar(50),
--
CATEGORY_ENTITY_TYPE varchar(4000),
NAME varchar(255),
CODE varchar(50),
CODE varchar(50) not null,
CATEGORY_ID varchar(36),
IS_ENTITY boolean,
DATA_TYPE varchar(200),
@ -691,6 +692,8 @@ create table SYS_CATEGORY_ATTR(
primary key (ID)
)^
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE, DELETE_TS);
alter table SYS_CATEGORY_ATTR add constraint SYS_CATEGORY_ATTR_CATEGORY_ID foreign key (CATEGORY_ID) references SYS_CATEGORY(ID)^
create table SYS_ATTR_VALUE (

View File

@ -725,8 +725,9 @@ create table SYS_CATEGORY_ATTR (
DELETE_TS datetime,
DELETED_BY varchar(50),
--
CATEGORY_ENTITY_TYPE varchar(4000),
NAME varchar(255),
CODE varchar(50),
CODE varchar(50) not null,
CATEGORY_ID uniqueidentifier,
IS_ENTITY tinyint,
DATA_TYPE varchar(200),
@ -749,7 +750,7 @@ create table SYS_CATEGORY_ATTR (
)^
create clustered index IDX_SYS_CATEGORY_ATTR_CATEGORY on SYS_CATEGORY_ATTR (CATEGORY_ID)^
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE, DELETE_TS);
-------------------------------------------------------------------------------------------------------------
create table SYS_ATTR_VALUE (

View File

@ -56,8 +56,9 @@ create table SYS_CATEGORY_ATTR (
UPDATED_BY varchar2(50),
DELETE_TS timestamp,
DELETED_BY varchar2(50),
CATEGORY_ENTITY_TYPE varchar(4000),
NAME varchar2(255),
CODE varchar2(50),
CODE varchar2(50) not null,
CATEGORY_ID varchar2(32),
IS_ENTITY char(1),
DATA_TYPE varchar2(200),
@ -77,6 +78,7 @@ create table SYS_CATEGORY_ATTR (
primary key(ID)
)^
create index IDX_SYS_CATEGORY_ATTR_CATEGORY on SYS_CATEGORY_ATTR(CATEGORY_ID)^
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE, DELETE_TS);
create table SYS_CONFIG (
ID varchar2(32) not null,

View File

@ -693,8 +693,9 @@ create table SYS_CATEGORY_ATTR (
DELETE_TS timestamp,
DELETED_BY varchar(50),
--
CATEGORY_ENTITY_TYPE varchar(4000),
NAME varchar(255),
CODE varchar(50),
CODE varchar(50) not null,
CATEGORY_ID uuid,
IS_ENTITY boolean,
DATA_TYPE varchar(200),
@ -717,6 +718,7 @@ create table SYS_CATEGORY_ATTR (
)^
create index IDX_SYS_CATEGORY_ATTR_CATEGORY on SYS_CATEGORY_ATTR (CATEGORY_ID)^
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE) where DELETE_TS is null;
-------------------------------------------------------------------------------------------------------------
create table SYS_ATTR_VALUE (

View File

@ -0,0 +1,6 @@
-- $Id$
alter table SYS_CATEGORY_ATTR add column CATEGORY_ENTITY_TYPE varchar(4000);
update SYS_CATEGORY_ATTR set CODE = NAME where CODE is null;
update SYS_CATEGORY_ATTR attr set CATEGORY_ENTITY_TYPE = (select cat.ENTITY_TYPE from SYS_CATEGORY cat where cat.ID = attr.CATEGORY_ID);
alter table SYS_CATEGORY_ATTR alter column CODE set not null;
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE, DELETE_TS);

View File

@ -0,0 +1,6 @@
-- $Id$
alter table SYS_CATEGORY_ATTR add column CATEGORY_ENTITY_TYPE varchar(4000);
update SYS_CATEGORY_ATTR set CODE = NAME where CODE is null;
update SYS_CATEGORY_ATTR attr set CATEGORY_ENTITY_TYPE = (select cat.ENTITY_TYPE from SYS_CATEGORY cat where cat.ID = attr.CATEGORY_ID);
alter table SYS_CATEGORY_ATTR alter column CODE set not null;
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE, DELETE_TS);

View File

@ -0,0 +1,6 @@
-- $Id$
alter table SYS_CATEGORY_ATTR add column CATEGORY_ENTITY_TYPE varchar(4000);
update SYS_CATEGORY_ATTR set CODE = NAME where CODE is null;
update SYS_CATEGORY_ATTR attr set CATEGORY_ENTITY_TYPE = (select cat.ENTITY_TYPE from SYS_CATEGORY cat where cat.ID = attr.CATEGORY_ID);
alter table SYS_CATEGORY_ATTR alter column CODE set not null;
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE, DELETE_TS);

View File

@ -0,0 +1,6 @@
-- $Id$
alter table SYS_CATEGORY_ATTR add column CATEGORY_ENTITY_TYPE varchar(4000);
update SYS_CATEGORY_ATTR set CODE = NAME where CODE is null;
update SYS_CATEGORY_ATTR attr set CATEGORY_ENTITY_TYPE = (select cat.ENTITY_TYPE from SYS_CATEGORY cat where cat.ID = attr.CATEGORY_ID);
alter table SYS_CATEGORY_ATTR alter column CODE set not null;
create unique index IDX_CAT_ATTR_ENT_TYPE_AND_CODE on SYS_CATEGORY_ATTR (CATEGORY_ENTITY_TYPE, CODE) where DELETE_TS is null;

View File

@ -0,0 +1,36 @@
/*
* Copyright (c) 2008-2015 Haulmont. All rights reserved.
* Use is subject to license terms, see http://www.cuba-platform.com/license for details.
*/
package com.haulmont.cuba.core.app.dynamicattributes;
import com.haulmont.cuba.core.entity.CategoryAttribute;
import com.haulmont.cuba.core.listener.BeforeInsertEntityListener;
import com.haulmont.cuba.core.listener.BeforeUpdateEntityListener;
import javax.annotation.ManagedBean;
/**
* @author degtyarjov
* @version $Id$
*/
@ManagedBean("report_CategoryAttributeListener")
public class CategoryAttributeListener
implements BeforeInsertEntityListener<CategoryAttribute>, BeforeUpdateEntityListener<CategoryAttribute> {
@Override
public void onBeforeInsert(CategoryAttribute entity) {
setCategoryEntityType(entity);
}
@Override
public void onBeforeUpdate(CategoryAttribute entity) {
setCategoryEntityType(entity);
}
protected void setCategoryEntityType(CategoryAttribute entity) {
if (entity.getCategory() != null) {
entity.setCategoryEntityType(entity.getCategory().getEntityType());
}
}
}

View File

@ -6,6 +6,7 @@
package com.haulmont.cuba.core.entity;
import com.haulmont.chile.core.annotations.NamePattern;
import com.haulmont.cuba.core.entity.annotation.Listeners;
import com.haulmont.cuba.core.entity.annotation.SystemLevel;
import org.apache.commons.lang.StringUtils;
import org.apache.openjpa.persistence.Persistent;
@ -18,6 +19,7 @@ import java.util.*;
@Table(name = "SYS_CATEGORY_ATTR")
@NamePattern("%s|name")
@SystemLevel
@Listeners("report_CategoryAttributeListener")
public class CategoryAttribute extends StandardEntity {
private static final long serialVersionUID = -6959392628534815752L;
@ -29,6 +31,9 @@ public class CategoryAttribute extends StandardEntity {
@JoinColumn(name = "CATEGORY_ID")
private Category category;
@Column(name = "CATEGORY_ENTITY_TYPE")
private String categoryEntityType;
@Column(name = "NAME", length = NAME_FIELD_LENGTH, nullable = false)
private String name;
@ -238,6 +243,14 @@ public class CategoryAttribute extends StandardEntity {
this.targetScreens = targetScreens;
}
public String getCategoryEntityType() {
return categoryEntityType;
}
public void setCategoryEntityType(String categoryEntityType) {
this.categoryEntityType = categoryEntityType;
}
public Set<String> targetScreensSet(){
if (StringUtils.isNotBlank(targetScreens)) {
return new HashSet<>(Arrays.asList(targetScreens.split(",")));

View File

@ -307,5 +307,6 @@ IDX_SEC_ROLE_UNIQ_NAME=A role with the same name already exists
IDX_SEC_USER_UNIQ_LOGIN=A user with the same login already exists
IDX_SEC_USER_ROLE_UNIQ_ROLE=The user already has this role
IDX_SEC_PERMISSION_UNIQUE=A permission with the same role, permission type and target already exists
IDX_CAT_ATTR_ENT_TYPE_AND_CODE=An attribute with the same code already exists for the entity type
LoginException.InvalidLoginOrPassword=Unknown login name or bad password: %s

View File

@ -298,5 +298,6 @@ IDX_SYS_SCHEDULED_TASK_UNIQ_BEAN_METHOD=Задача с такими bean name,
IDX_SEC_ROLE_UNIQ_NAME=Роль с таким именем уже существует
IDX_SEC_USER_UNIQ_LOGIN=Пользователь с таким логином уже существует
IDX_SEC_USER_ROLE_UNIQ_ROLE=У пользователя уже есть эта роль
IDX_CAT_ATTR_ENT_TYPE_AND_CODE=Динамический атрибут с таким кодом уже задан для данного типа сущности
LoginException.InvalidLoginOrPassword=Неверный логин или пароль: %s