/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.editor.blocks;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import com.hundsun.ares.studio.core.ARESModelException;
import com.hundsun.ares.studio.core.IARESModule;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.model.ICommonModel;
import com.hundsun.ares.studio.core.model.ModuleProperty;
import com.hundsun.ares.studio.ui.editor.IDiagnosticProvider;
import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelColumnLabelProvider;
import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelEditingSupport;
import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelUtils;
import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelEditingSupport;
import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelPropertyDescriptor;
import com.hundsun.ares.studio.ui.editor.extend.IMapExtensibleModelPropertyDescriptor;
import com.hundsun.ares.studio.ui.editor.extend.UserExtensibleModelEditingSupport;
/**
*
* @author yanwj06282
*/
public class OpenResourceHelper {
public static Map<String,String> createExtensibleModelTableViewerColumns(
TableViewer viewer, IARESResource resource, IDiagnosticProvider diagnosticProvider ,Set<String> exDupTitle) {
EObject info = null;
Map<String,String> exTitle = new LinkedHashMap<String,String>();
try {
info = resource.getInfo(EObject.class);
} catch (ARESModelException e) {
e.printStackTrace();
}
if (info == null) {
return exTitle;
}
//������Ҫ�ҳ�����Դ��Ӧ��ģ��EClass
EClass eClass = null;
for (Object obj : EPackage.Registry.INSTANCE.values()) {
if (obj instanceof EPackage) {
Class[] cla = info.getClass().getInterfaces();
if (cla.length > 0) {
eClass = (EClass) ((EPackage) obj).getEClassifier(cla[0].getSimpleName());
if (eClass != null) {
break;
}
}
}
}
if (eClass == null) {
return exTitle;
}
IExtensibleModelEditingSupport[] editingSupports = ExtensibleModelUtils
.getEndabledEditingSupports(resource, eClass);
GC gc = new GC(viewer.getControl());
try {
for (IExtensibleModelEditingSupport support : editingSupports) {
//ֻ�����û���չ����������ȫ������
if (!(support instanceof UserExtensibleModelEditingSupport)) {
continue;
}
for (IExtensibleModelPropertyDescriptor descriptor : support
.getPropertyDescriptors(resource, eClass)) {
String displayName = descriptor.getDisplayName();
if (!exDupTitle.contains(displayName)) {
exDupTitle.add(displayName);
}else {
continue;
}
if (descriptor instanceof IMapExtensibleModelPropertyDescriptor) {
Object obj = ((IMapExtensibleModelPropertyDescriptor)descriptor).getKey();
if (obj != null) {
exTitle.put(displayName , obj.toString());
}
}
TableViewerColumn tvColumn = new TableViewerColumn(viewer,
SWT.LEFT);
// ���ȸ�����ʵ�����������
Point p = gc.stringExtent(displayName);
tvColumn.getColumn().setWidth(p.x + 20);
tvColumn.getColumn().setText(displayName);
ExtensibleModelColumnLabelProvider provider = new ExtensibleModelColumnLabelProvider(
support, descriptor , resource){
@Override
protected EObject getOwner(Object element) {
if (element instanceof OpenResourceInfo) {
return ((OpenResourceInfo) element).getObj();
}if (element instanceof EObject) {
return (EObject) element;
}
return null;
}
@Override
public String getText(Object element) {
if (element instanceof OpenResourceInfo) {
return super.getText(((OpenResourceInfo) element).getObj());
}
return StringUtils.EMPTY;
}
@Override
protected Image doGetImage(Object element) {
if (element instanceof OpenResourceInfo) {
return super.doGetImage(((OpenResourceInfo) element).getObj());
}
return null;
}
};
provider.setDiagnosticProvider(diagnosticProvider);
tvColumn.setLabelProvider(provider);
tvColumn.setEditingSupport(new ExtensibleModelEditingSupport(
viewer, support, descriptor));
tvColumn.getColumn().setMoveable(true);
}
}
} finally {
gc.dispose();
}
return exTitle;
}
public static String getType(Object element){
if (element instanceof OpenResourceInfo) {
String type = ((OpenResourceInfo) element).getResource().getType();
if (StringUtils.equals(type, "table")) {
return "��";
}else if (StringUtils.equals(type, "view")) {
return "��ͼ";
}else if (StringUtils.equals(type, "jres_osequence")) {
return "����";
}else if (StringUtils.equals(type, "dbobject")) {
return "Oracle��ռ�";
}else if (StringUtils.equals(type, "dbuser")) {
return "Oracle�û�Ȩ��";
}else if (StringUtils.equals(type, "service")) {
return "����";
}else if (StringUtils.equals(type, "object")) {
return "����";
}else if (StringUtils.equals(type, "logicservice")) {
return "������";
}else if (StringUtils.equals(type, "logicfunction")) {
return "������";
}else if (StringUtils.equals(type, "atomservice")) {
return "ԭ�ӷ���";
}else if (StringUtils.equals(type, "atomfunction")) {
return "ԭ�Ӻ���";
}else if (StringUtils.equals(type, "procedure")) {
return "����";
}else if (StringUtils.equals(type, "singletabledata")) {
return "��������";
}
}
return StringUtils.EMPTY;
}
public static String getChineseFileName (String separator ,IARESModule module){
StringBuffer sb = new StringBuffer();
getModuleChineseName(module, sb ,separator);
String[] ps = StringUtils.split(sb.toString(), separator);
StringBuffer sbf = new StringBuffer();
for (int i = ps.length-1; i > -1 && ps.length > 0; i--) {
if (StringUtils.isNotBlank(sbf.toString())) {
sbf.append(separator);
}
sbf.append(ps[i]);
}
return sbf.toString();
}
public static void getModuleChineseName (IARESModule module , StringBuffer sb , String separator){
if (module != null) {
IARESResource property = module.getARESResource(IARESModule.MODULE_PROPERTY_FILE);
if (property != null && property.exists()) {
try {
ModuleProperty info = property.getInfo(ModuleProperty.class);
if (info != null) {
Object obj = info.getValue(ICommonModel.CNAME);
if (obj != null) {
if (StringUtils.isNotBlank(sb.toString())) {
sb.append(separator);
}
sb.append(obj.toString());
}
}
} catch (ARESModelException e) {
e.printStackTrace();
}
}
getModuleChineseName(module.getParentModule(), sb ,separator);
}
}
}