/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package framework.beans.directory.simple;
import framework.beans.directory.DirectoryBean;
import framework.beans.directory.DirectoryItemDetails;
import framework.beans.directory.DirectoryEntity;
import framework.beans.directory.DirectoryEntityDirty;
import framework.beans.directory.DirectoryEntityExternal;
import framework.beans.directory.DirectoryEntityTrash;
import framework.beans.directory.simple.entities.Arm;
import framework.beans.directory.simple.entities.ClientDocumentType;
import framework.beans.directory.simple.entities.DocumentGivenPlace;
import framework.beans.directory.simple.entities.IntelWriterType;
import framework.beans.directory.simple.entities.Name;
import framework.beans.directory.simple.entities.Patronymic;
import framework.beans.directory.simple.entities.Sex;
import framework.beans.directory.simple.entities.Surname;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import framework.security.UserRight;
import framework.security.UserRightsSetAbstract;
import java.util.Iterator;
import reportgen.cores.ejb.annotations.DefineQueryEntity;
/**
* Как ни странно сушность итема ни с чем больше не связана
* @security ok
* @author axe
*/
public abstract class DirectorySimpleBeanAbstract extends DirectoryBean<DirectoryEntity<DirectoryItemDetails>, DirectoryItemDetails>
implements DirectorySimpleBeanRemoteAbstract {
public static final int DL_SURNAME = 1;
public static final int DL_NAME = 2;
public static final int DL_PATHRON = 3;
public static final int DL_SEX = 4;
public static final int DL_ARMS = 5;
public static final int DL_INTELLI_WRITER_TYPE = 6;
public static final int DL_DOCUMENT_TYPE = 7;
public static final int DL_DOCUMENT_GIVEN_PLACE = 8;
protected boolean hasExtKey = false;
protected boolean hasDirty = false;
protected boolean hasTrash = false;
public DirectorySimpleBeanAbstract() {
super(null, null);
}
@Override
protected UserRight getRightForCreateDirectoryItem() throws ClipsServerException {
Class<? extends DirectoryEntity<DirectoryItemDetails>> clazz = getEntityClass();
if (clazz == Surname.class) {
return UserRightsSetAbstract.CREATE_DIRECTORY_COMMON_ITEM;
} else if (clazz == Name.class) {
return UserRightsSetAbstract.CREATE_DIRECTORY_COMMON_ITEM;
} else if (clazz == Patronymic.class) {
return UserRightsSetAbstract.CREATE_DIRECTORY_COMMON_ITEM;
} else if (clazz == Sex.class) {
return UserRightsSetAbstract.WRITE_DEVELOPER_DIRECTORY;
} else if (clazz == Arm.class) {
return UserRightsSetAbstract.WRITE_REGION_ADMIN_DIRECTORY;
} else if (clazz == IntelWriterType.class) {
return UserRightsSetAbstract.CREATE_DIRECTORY_INTEL_WRITER;
} else if (clazz == ClientDocumentType.class) {
return UserRightsSetAbstract.WRITE_DEVELOPER_DIRECTORY;
} else if (clazz == DocumentGivenPlace.class) {
return UserRightsSetAbstract.CREATE_DIRECTORY_COMMON_ITEM;
} else {
System.err.println("Для справочника '" + clazz.getSimpleName() + "' не определены права");
return UserRightsSetAbstract.WRITE_DEVELOPER_DIRECTORY;
}
}
@Override
protected UserRight getRightForWriteToDirectory() throws ClipsServerException {
Class<? extends DirectoryEntity<DirectoryItemDetails>> clazz = getEntityClass();
if (clazz == Surname.class) {
return UserRightsSetAbstract.WRITE_REGION_ADMIN_DIRECTORY;
} else if (clazz == Name.class) {
return UserRightsSetAbstract.WRITE_REGION_ADMIN_DIRECTORY;
} else if (clazz == Patronymic.class) {
return UserRightsSetAbstract.WRITE_REGION_ADMIN_DIRECTORY;
} else if (clazz == Sex.class) {
return UserRightsSetAbstract.WRITE_DEVELOPER_DIRECTORY;
} else if (clazz == Arm.class) {
return UserRightsSetAbstract.WRITE_REGION_ADMIN_DIRECTORY;
} else if (clazz == IntelWriterType.class) {
return UserRightsSetAbstract.WRITE_REGION_ADMIN_DIRECTORY;
} else if (clazz == ClientDocumentType.class) {
return UserRightsSetAbstract.WRITE_DEVELOPER_DIRECTORY;
} else if (clazz == DocumentGivenPlace.class) {
return UserRightsSetAbstract.WRITE_REGION_ADMIN_DIRECTORY;
} else {
System.err.println("Для справочника '" + clazz.getSimpleName() + "' не определены права");
return UserRightsSetAbstract.WRITE_DEVELOPER_DIRECTORY;
}
}
@Override
public boolean init(int type) throws ClipsServerException {
switch (type) {
case DL_SURNAME: {
entityClass = Surname.class;
break;
}
case DL_NAME: {
entityClass = Name.class;
break;
}
case DL_PATHRON: {
entityClass = Patronymic.class;
break;
}
case DL_SEX: {
entityClass = Sex.class;
break;
}
case DL_ARMS: {
entityClass = Arm.class;
break;
}
case DL_INTELLI_WRITER_TYPE: {
entityClass = IntelWriterType.class;
break;
}
case DL_DOCUMENT_TYPE: {
entityClass = ClientDocumentType.class;
break;
}
case DL_DOCUMENT_GIVEN_PLACE: {
entityClass = DocumentGivenPlace.class;
break;
}
default: {
return false;
}
}
DefineQueryEntity gene = entityClass.getAnnotation(DefineQueryEntity.class);
if (gene != null) {
hudClassName = gene.title();
}
if (DirectoryEntityExternal.class.isAssignableFrom(entityClass)) {
hasExtKey = true;
}
if (DirectoryEntityDirty.class.isAssignableFrom(entityClass)) {
hasDirty = true;
}
if (DirectoryEntityTrash.class.isAssignableFrom(entityClass)) {
hasTrash = true;
}
return true;
}
@Override
protected void set(DirectoryEntity entity, DirectoryItemDetails d) throws ClipsServerException {
entity.setTitle(d.title);
if (entity instanceof DirectoryEntityDirty) {
((DirectoryEntityDirty)entity).setDirty(d.dirty);
}
if (entity instanceof DirectoryEntityExternal) {
((DirectoryEntityExternal)entity).setExtKey(d.external_key != null ? d.external_key : "");
}
if (entity instanceof DirectoryEntityTrash) {
((DirectoryEntityTrash)entity).setTrash(d.hidden);
}
}
/**
* Проверяет уникайльнойсть итемов
* Для справочников содержащих внешний ключ проверяется уникальность по внешнему ключу
* Для остальных проверяется уникальность по тайтлу
* @param item
* @throws framework.generic.ClipsServerException
*/
@Override
protected void checkUniqe(DirectoryItemDetails item) throws ClipsServerException {
Field[] f = null;
if (DirectoryEntityExternal.class.isAssignableFrom(entityClass)) {
f = new Field[]{ new Field("extKey", item.external_key) };
} else {
f = new Field[]{ new Field("title", item.title) };
}
Iterator iterator = findEntityList(entityClass, f).iterator();
while (iterator.hasNext()) {
DirectoryEntity de = (DirectoryEntity)iterator.next();
if (item.id != de.getId()) {
throw new EDataIntegrity("Элемент справочника с таким названием (или внешним ключем) уже присутствует в базе");
}
}
}
@Override
public boolean isExternal() {
return hasExtKey;
}
@Override
public boolean isDirty() {
return hasDirty;
}
@Override
public boolean isTrash() {
return hasTrash;
}
}