/**
* Դ�������ƣ�TableIndexScriptWrapImpl.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.clearinghouse.core.script.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
import com.hundsun.ares.studio.jres.model.database.TableIndex;
import com.hundsun.ares.studio.jres.model.database.TableIndexColumn;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
import com.hundsun.ares.studio.jres.script.api.database.ITableColScriptWrap;
import com.hundsun.ares.studio.jres.script.api.database.ITableIndexScriptWrap;
import com.hundsun.ares.studio.jres.script.api.database.ITableScriptWrap;
import com.hundsun.ares.studio.jres.script.base.CommonScriptWrap;
import com.hundsun.ares.studio.jres.script.internal.util.IJSONUtil;
/**
* @author yanwj06282
*
*/
public class TableIndexScriptWrapImpl extends CommonScriptWrap<TableIndex> implements ITableIndexScriptWrap {
private ITableScriptWrap tableWrap;
private List<ITableColScriptWrap> wraps = new ArrayList<ITableColScriptWrap>();
public TableIndexScriptWrapImpl(ITableScriptWrap tableWrap , TableIndex index , IARESResource resource) {
super(index ,resource);
if (tableWrap == null) {
this.tableWrap = new TableScriptWrapImpl(resource);
}else {
this.tableWrap = tableWrap;
}
for (TableIndexColumn indexColumn : index.getColumns()){
for(ITableColScriptWrap tc :this.tableWrap.getTableColumns()){
if (StringUtils.equals(tc.getName(), indexColumn.getColumnName())) {
wraps.add(tc);
}
}
}
}
@Override
public String getName() {
return getOriginalInfo().getName();
}
@Override
public String getType() {
return null;
}
public String getSql(String type , String prefix , boolean isUser){
StringBuffer sqlBuffer = new StringBuffer();
// ������
String indexName = getOriginalInfo().getName();
// �Ƿ�Ψһ
boolean unique = getOriginalInfo().isUnique();
String tableName = tableWrap.getName(prefix);
String user = tableWrap.getDbuser(prefix);
if (isUser && StringUtils.isNotBlank(user)) {
tableName = user + "." +tableName;
}
sqlBuffer.append("CREATE ");
sqlBuffer.append(unique ? "UNIQUE " : "");
// sqlBuffer.append(cluster ? "CLUSTERED " : "");
sqlBuffer.append("INDEX " + prefix + indexName + " ON " + tableName);
// �����ֶ�
EList<TableIndexColumn> indexCols = getOriginalInfo().getColumns();
for(int i = 0;i< indexCols.size() ; i++){
TableIndexColumn ic = indexCols.get(i);
String indexColName = ic.getColumnName();
indexColName = getTableName(indexColName);
if(i == 0){
sqlBuffer.append("(" + indexColName);
}else{
sqlBuffer.append("," + indexColName);
}
if (ic.isAscending()) {
sqlBuffer.append(" ASC ");
} else {
sqlBuffer.append(" DESC ");
}
if (i == indexCols.size()-1) {
sqlBuffer.append(")");
}
}
return sqlBuffer.toString();
}
public ITableColScriptWrap[] getTableIndexColumns(){
return wraps.toArray(new ITableColScriptWrap[0]);
}
@Override
public String getMark() {
return getOriginalInfo().getMark();
}
@Override
public boolean isUnique() {
return getOriginalInfo().isUnique();
}
@Override
public boolean isCluster() {
return getOriginalInfo().isCluster();
}
public boolean isReverse(){
String reverse = IJSONUtil.instance.getStringFromJSON(toJSON(),
"Oracle_reverse");
if (StringUtils.isNotBlank(reverse)) {
return Boolean.parseBoolean(reverse);
}
return false;
}
private String getTableName(String indexColName){
EObject obj = getTableResourceData(getOriginalInfo());
if (obj instanceof TableResourceData) {
for (TableColumn tableColumn : ((TableResourceData)obj).getColumns()){
if (StringUtils.equals(tableColumn.getFieldName(), indexColName)) {
return tableColumn.getName();
}
}
}
return indexColName;
}
private EObject getTableResourceData (EObject obj){
if (obj == null) {
return null;
}
if (obj instanceof TableResourceData) {
return (TableResourceData) obj;
}else {
return getTableResourceData(obj.eContainer());
}
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.script.api.database.ITableIndexScriptWrap#trim()
*/
@Override
public void trim() {
// TODO Auto-generated method stub
for(TableIndexColumn indexcol : getOriginalInfo().getColumns()){
indexcol.setColumnName(indexcol.getColumnName().trim().toLowerCase());
}
}
}