/**
* <p>Copyright: Copyright (c) 2014</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.jres.basicdata.ui.scriptwrap;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.eclipse.emf.ecore.EAttribute;
import com.hundsun.ares.studio.core.ConsoleHelper;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicDataEAttribute;
import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicDataField;
import com.hundsun.ares.studio.jres.basicdata.logic.util.BasicDataEpackageUtil;
import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType;
import com.hundsun.ares.studio.jres.metadata.core.script.impl.BusDataTypeItemScriptWrapImpl;
import com.hundsun.ares.studio.jres.metadata.core.script.impl.DictScriptWrapImpl;
import com.hundsun.ares.studio.jres.metadata.core.script.impl.StandardFieldScriptWrapImpl;
import com.hundsun.ares.studio.jres.metadata.service.IBusinessDataType;
import com.hundsun.ares.studio.jres.metadata.service.IDictionaryType;
import com.hundsun.ares.studio.jres.metadata.service.IMetadataService;
import com.hundsun.ares.studio.jres.model.metadata.BusinessDataType;
import com.hundsun.ares.studio.jres.model.metadata.DictionaryType;
import com.hundsun.ares.studio.jres.model.metadata.MetadataItem;
import com.hundsun.ares.studio.jres.model.metadata.StandardField;
import com.hundsun.ares.studio.jres.model.metadata.TypeDefaultValue;
import com.hundsun.ares.studio.jres.model.metadata.decrypt.DeBusinessDataType;
import com.hundsun.ares.studio.jres.model.metadata.decrypt.DeMetadataItem;
import com.hundsun.ares.studio.jres.script.api.metadata.IBizDataTypeItemScriptWrap;
import com.hundsun.ares.studio.jres.script.api.metadata.IDictEntryScriptWrap;
import com.hundsun.ares.studio.jres.script.api.metadata.ITypeDefaultValueItemScriptWrap;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
/**
* @author liaogc
* �������ݽű�APIʵ��(֧�ַDZ��ֶ�)
*
*/
public class BasicDataFieldScriptWrapImpl extends StandardFieldScriptWrapImpl{
private EAttribute attribute;
private IMetadataService service = null;
private boolean isStandardField = false;
private IBusinessDataType ibusType;
static final Logger console = ConsoleHelper.getLogger();
/**
* @param proxy
* @param resource
*/
public BasicDataFieldScriptWrapImpl(IMetadataService service,EAttribute attribute,
IARESResource resource ) {
super(null, resource);
this.service = service;
this.attribute = attribute;
init();
}
private void init(){
if (BasicDataEpackageUtil.isStandardField(attribute)) {
proxy = service.getStandardField(attribute.getName());
isStandardField = true;
if(proxy==null){
console.info(attribute.getName()+"(" +getChineseName()+")"+"���ֶβ�����");
}
if(proxy!=null){
ibusType = proxy.getDataType();
}
if(ibusType==null){
console.info(attribute.getName()+"(" +getChineseName()+")"+"��Ӧ��ҵ���������Ͳ�����");
}
} else {
isStandardField = false;
proxy = null;
if (attribute instanceof BasicDataEAttribute) {
BasicDataEAttribute basicDataEAttribute = (BasicDataEAttribute) attribute;
if (basicDataEAttribute.getData() != null) {
if (basicDataEAttribute.getData() instanceof BasicDataField) {
BasicDataField basicDataField = (BasicDataField) basicDataEAttribute
.getData();
ibusType = service.getBusinessDataType(basicDataField
.getDataType());
if(ibusType==null){
console.info(attribute.getName()+"(" +getChineseName()+")"+"��Ӧ��ҵ���������Ͳ�����");
}
}
}
}
}
}
@Override
public IBizDataTypeItemScriptWrap getBizDataType() {
if (ibusType instanceof DeBusinessDataType) {
BusinessDataType busType = ((DeBusinessDataType) ibusType)
.getProxyItem();
if (busType != null) {
return new BusDataTypeItemScriptWrapImpl(busType, resource);
}
}
return null;
}
@Override
public String getRealType(String type) {
String realType = "";
if (ibusType != null) {
realType = ibusType.getRealType(type);
}
return realType;
}
@Override
public int getLength() {
int length = 0;
if (ibusType != null) {
if (StringUtils.isNotBlank(ibusType.getLength())) {
try {
length = Integer.parseInt(ibusType.getLength());
} catch (Exception e) {
}
}
}
return length;
}
@Override
public int getPrecision() {
int precision = 0;
if (ibusType != null) {
if (StringUtils.isNotBlank(ibusType.getPrecision())) {
try {
precision = Integer.parseInt(ibusType.getPrecision());
} catch (Exception e) {
}
}
}
return precision;
}
public IDictEntryScriptWrap getDictInfo(){
if(isStandardField && proxy!=null){
IDictionaryType dt = proxy.getDictionaryType();
if (dt instanceof DeMetadataItem) {
MetadataItem item = ((DeMetadataItem) dt).getProxyItem();
if (item != null) {
return new DictScriptWrapImpl((DictionaryType)item, resource);
}
}
}
return null;
}
@Override
public String getName() {
String name = "";
if(isStandardField && proxy!=null){
name = proxy.getName();
}else{
name = attribute.getName();
}
return name;
}
@Override
public String getChineseName() {
String chineseName = "";
if(isStandardField && proxy!=null){
chineseName = proxy.getChineseName();
}
else{
if(attribute instanceof BasicDataEAttribute){
BasicDataEAttribute basicDataEAttribute = (BasicDataEAttribute) attribute;
if (basicDataEAttribute.getData() != null) {
if (basicDataEAttribute.getData() instanceof BasicDataField) {
BasicDataField basicDataField = (BasicDataField) basicDataEAttribute.getData();
chineseName = basicDataField.getChineseName();
}
}
}
}
return chineseName;
}
@Override
public StandardField getOriginalInfo() {
if (isStandardField && proxy instanceof DeMetadataItem && proxy!=null) {
return (StandardField) ((DeMetadataItem) proxy).getProxyItem();
}
return null;
}
public String getDescription(){
if(proxy!=null){
return proxy.getDescription();
}
return "";
}
@Override
public String getTrueDefaultValue(String type) {
String dv = getDefaultValue(attribute ,type);
if (StringUtils.isNotBlank(dv)) {
return dv;
}
IBizDataTypeItemScriptWrap bizType = getBizDataType();
if (bizType != null) {
ITypeDefaultValueItemScriptWrap defaultValue = bizType.getDefaultValue();
if (defaultValue != null) {
return defaultValue.getValue(type);
}
}
return StringUtils.EMPTY;
}
/**
* ��ȡĬ��ֵ����ȡ���ֶε�Ĭ��ֵ�������Ӧ�ı��ֶ�Ĭ��ֵΪ�գ���ȥҵ���������͵ı��ֶ�
* @param attribute
* @return
*/
private String getDefaultValue(EAttribute attribute , String type){
if(attribute instanceof BasicDataEAttribute ){
BasicDataEAttribute basicDataEAttribute = (BasicDataEAttribute) attribute;
if(basicDataEAttribute.getData() !=null){
if(basicDataEAttribute.getData() instanceof BasicDataField){
BasicDataField basicDataField = (BasicDataField) basicDataEAttribute.getData();
String defv = basicDataField.getDefaultValue();
if (StringUtils.isNotBlank(defv)) {
ReferenceInfo devInfo = ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.DefValue, defv, false);
if (devInfo != null) {
Object obj = devInfo.getObject();
if (obj instanceof TypeDefaultValue) {
return ((TypeDefaultValue) obj).getValue(type);
}
}else {
return defv;
}
}
}
}
}
return StringUtils.EMPTY;
}
}