/**
* Դ�������ƣ�IndexTable.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.database.ui.editors.dialog.inner;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.database.ui.editors.dialog.IndexAddSelectEditorDialog;
import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType;
import com.hundsun.ares.studio.jres.model.database.ColumnType;
import com.hundsun.ares.studio.jres.model.database.DatabaseFactory;
import com.hundsun.ares.studio.jres.model.database.DatabasePackage;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
import com.hundsun.ares.studio.jres.model.database.TableIndexColumn;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
import com.hundsun.ares.studio.jres.model.metadata.StandardField;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
import com.hundsun.ares.studio.ui.cellEditor.AresContentProposalProvider;
import com.hundsun.ares.studio.ui.editor.editingsupport.BooleanEditingSupport;
import com.hundsun.ares.studio.ui.editor.editingsupport.JresTextEditingSupportWithContentAssist;
import com.hundsun.ares.studio.ui.editor.extend.CheckBoxColumnLabelProvider;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
/**
* �༭�����еı��
* @author yanyl
*
*/
public class IndexTable extends TableViewerWithButtons {
private IARESResource resource;
private TableResourceData tableResourceData;
/**
* @param parent
*/
public IndexTable(Composite parent, IARESResource resource,TableResourceData tableResourceData) {
super(parent);
this.resource = resource;
this.tableResourceData = tableResourceData;
}
/*
* (non-Javadoc)
*
* @see com.hundsun.ares.studio.jres.database.ui.editors.dialog.inner.
* TableViewerWithButtons#createButtons(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createButtons(Composite parent) {
final TableViewer tableViewer = this;
Button add = new Button(parent, SWT.None);
add.setText("���");
final Shell shell = parent.getShell();
add.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IndexAddSelectEditorDialog dialog = new IndexAddSelectEditorDialog(shell,"����ѡ���", tableResourceData,getInput(), resource);
if (dialog.open() == Window.OK) {
@SuppressWarnings("unchecked")
Collection<TableIndexColumn> inputs = (Collection<TableIndexColumn>) getInput();
for (TableColumn select : dialog.getSelectedColumns()) {
TableIndexColumn column = DatabaseFactory.eINSTANCE.createTableIndexColumn();
column.setColumnName(select.getName());
column.setColumnType(select.getColumnType());
column.setAscending(true);
inputs.add(column) ;
}
}
// ������ʵ��Ϊnullʱ������������Ѿ���create()��������ִ����
tableViewer.refresh();
}
});
TableButtonFactory.createRemoveBtn(parent, this);
TableButtonFactory.createMoveUpBtn(parent, this);
TableButtonFactory.createMoveDownBtn(parent, this);
}
private static final String[] TITLES = new String[] { "�ֶ���", "����", "������", "˵��" };
private static final int[] WIDTHS = new int[] { 80, 50, 100, 100 };
private static final EAttribute[] ATTRIBUTES = {
DatabasePackage.Literals.TABLE_INDEX_COLUMN__COLUMN_NAME,
DatabasePackage.Literals.TABLE_INDEX_COLUMN__ASCENDING};
/*
* (non-Javadoc)
*
* @see com.hundsun.ares.studio.jres.database.ui.editors.dialog.inner.
* BasicTableViewer#createTitles()
*/
@Override
protected String[] createTitles() {
return TITLES;
}
/*
* (non-Javadoc)
*
* @see com.hundsun.ares.studio.jres.database.ui.editors.dialog.inner.
* BasicTableViewer#createTitlesWidth()
*/
@Override
protected int[] createTitlesWidth() {
// TODO Auto-generated method stub
return WIDTHS;
}
/*
* (non-Javadoc)
*
* @see com.hundsun.ares.studio.jres.database.ui.editors.dialog.inner.
* BasicTableViewer#createLabelProvider(int)
*/
@Override
protected ColumnLabelProvider createLabelProvider(int index) {
final ReferenceManager manager = ReferenceManager.getInstance();
switch (index) {
case 0:
return new EObjectColumnLabelProvider(ATTRIBUTES[index]);
case 1:
return new CheckBoxColumnLabelProvider(ATTRIBUTES[index] ,resource);
case 2:
return new EObjectColumnLabelProvider(DatabasePackage.Literals.TABLE_INDEX_COLUMN__COLUMN_NAME) {
@Override
public String getText(Object element) {
TableIndexColumn column = (TableIndexColumn) element;
String name = column.getColumnName();
if (column.getColumnType() == ColumnType.STD_FIELD) {
ReferenceInfo ref = (ReferenceInfo) manager.getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.StdField, name, true);
if (ref != null) {
StandardField stdField = (StandardField) ref.getObject();
return stdField == null ? StringUtils.EMPTY : StringUtils.defaultString(stdField.getChineseName());
}else {
return StringUtils.EMPTY;
}
} else {
TableColumn c = findColumn(name);
if (c != null) {
return StringUtils.defaultString(c.getChineseName());
}
return StringUtils.EMPTY;
}
}
};
case 3:
return new EObjectColumnLabelProvider(DatabasePackage.Literals.TABLE_INDEX_COLUMN__COLUMN_NAME) {
@Override
public String getText(Object element) {
TableIndexColumn column = (TableIndexColumn) element;
String name = column.getColumnName();
if (column.getColumnType() == ColumnType.STD_FIELD) {
ReferenceInfo ref = (ReferenceInfo) manager.getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.StdField, name, true);
if (ref != null) {
StandardField stdField = (StandardField) ref.getObject();
return stdField == null ? StringUtils.EMPTY : StringUtils.defaultString(stdField.getDescription());
}else {
return StringUtils.EMPTY;
}
} else {
TableColumn c = findColumn(name);
if (c != null) {
return StringUtils.defaultString(c.getDescription());
}
return StringUtils.EMPTY;
}
}
};
default:
return new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return "";
}
};
}
}
private TableColumn findColumn(String name) {
for (TableColumn c : tableResourceData.getColumns()) {
if (StringUtils.equals(c.getName(), name))
return c;
}
return null;
}
private Collection<String> contents = null;
/**
* ��ȡ���еĿ�ѡ������
*
* @return
*/
@SuppressWarnings("unchecked")
private List<String> getSelectableCols() {
if (contents == null) {
// ���еı�����ڵ�ǰTableViewer��ʼ����Ͳ������
contents = new ArrayList<String>();
for (TableColumn column : tableResourceData.getColumns()) {
contents.add(column.getName());
}
}
Collection<String> exsits = new ArrayList<String>();
Collection<TableIndexColumn> inputs = (Collection<TableIndexColumn>) getInput();
for (TableIndexColumn column : inputs) {
exsits.add(column.getColumnName());
}
List<String> selectableCols = new ArrayList<String>();
for (String column : contents) {
if (!exsits.contains(column)) {
selectableCols.add(column);
}
}
return selectableCols;
}
/*
* (non-Javadoc)
*
* @see com.hundsun.ares.studio.jres.database.ui.editors.dialog.inner.
* BasicTableViewer#createEditingSupport(int)
*/
@Override
protected EditingSupport createEditingSupport(int index) {
switch (index) {
case 0:
return new JresTextEditingSupportWithContentAssist(this,
ATTRIBUTES[index], new AresContentProposalProvider() {
@Override
public void updateContent(Object element) {
Collection<String> strs = getSelectableCols();
setInput(strs.toArray(new String[strs.size()]));
}
@Override
public IContentProposal[] getProposals(String contents,
int position) {
List<IContentProposal> proposals = new ArrayList<IContentProposal>();
if (input != null) {
for (Object obj : input) {
if (StringUtils.startsWithIgnoreCase(obj.toString(), contents)) {
IContentProposal proposal = new StringProposal(
obj);
if (proposal != null) {
proposals.add(proposal);
}
}
}
}
return proposals.toArray(new IContentProposal[0]);
}
});
case 1:
return new BooleanEditingSupport(this, ATTRIBUTES[index]);
default:
return null;
}
}
}