You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

301 lines
8.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.teamcenter.rac.kernel;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;
/**
* 此类继承系统InterfaceDatasetAction类用于重写preProcess方法在打开 数据集 时前操作。
*
* @author yangh
* @version 1.0, 2015-01-6
*/
public class OpenDatasetSignoff implements InterfaceDatasetAction {
@Override
public boolean postProcess(TCComponentDataset arg0, String arg1, int arg2) {
// TODO Auto-generated method stub
return false;
}
@SuppressWarnings("deprecation")
@Override
public int preProcess(TCComponentDataset tccomponentdataset, AEShell arg1,
int arg2) {
// System.out.println(arg1.askSelectedFileName());
// TODO Auto-generated method stub
TCPreferenceService tcp = tccomponentdataset.getSession()
.getPreferenceService();
// type+"_signoff" type+"_signoff"+"_attr"
// IMAN_master_form_rev:FormType
// Rev.item_id=域名
// Form.object_name=域名
try {
StringBuffer itemMsgSb = new StringBuffer();
TCComponentItemRevision tempRev = (TCComponentItemRevision) tccomponentdataset
.getReferenceProperty("item_revision");// 获得当前数据集所在版本对象
if (tempRev == null) {
return 0;
}
tempRev.refresh();
if (tempRev != null) {
if (tccomponentdataset.getType().equals("TM2_AutoCAD")
|| tccomponentdataset.getType().equals("JF3_DWG")) {
openCad();
String tempType = tempRev.getType();
this.getClass().getProtectionDomain().getCodeSource()
.getLocation().getPath();
String itemID = "";
if (tempType.equals("TM2_TedrawingRevision")) {
TCComponent[] comps = tempRev
.getReferenceListProperty("IMAN_master_form_rev");
if (comps.length > 0)
itemID = comps[0].getStringProperty("tm2_tuhao");
} else {
itemID = tempRev.getStringProperty("item_id");
}
itemMsgSb
.append(itemID)
.append("|")
.append(tempRev
.getStringProperty("item_revision_id"));
// tempRev.getStringProperty("item_revision_id");
String fileName = System.getenv("TEMP")
+ "\\open_cad_info.txt";
try {
BufferedWriter wr = new BufferedWriter(new FileWriter(
fileName));
wr.write(itemMsgSb.toString());
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("版本类型:" + tempRev.getType());
String str1 = tcp.getString(
TCPreferenceService.TC_preference_site,
tempRev.getType() + "_signoff");
String[] str2 = tcp.getStringArray(
TCPreferenceService.TC_preference_site,
tempRev.getType() + "_signoff_attr");
if (str1 != null && str1.indexOf(":") > 0 && str2 != null
&& str2.length > 0) {// 含有获取Form的属性情况
String rel = str1.split(":")[0];
String formType = str1.split(":")[1];
System.out.println("关系名称:" + rel);
TCComponent[] subComponent = tempRev
.getRelatedComponents(rel);
for (int i = 0; i < subComponent.length; i++) {
subComponent[i].refresh();
System.out.println("遍历的Form类型"
+ subComponent[i].getType() + " ReadForm ="
+ formType);
if (subComponent[i] instanceof TCComponentForm
&& subComponent[i].getType().equals(formType)) {
System.out.println("ReadForm");
DatasetParser dp = new DatasetParser(tempRev,
(TCComponentForm) subComponent[i]);
Vector<String> txtFileContent = dp
.parsePreference(str2);
String txtFilePath = System.getenv("TEMP")
+ "\\signoff.txt";// 为了VB程序操作的方便将生成的txt文档的路径和名字写死了。
TxtFileRWHelper helper = new TxtFileRWHelper(
txtFilePath);
try {
helper.writeTxtFile(txtFileContent);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
} else {
System.out.println("NOT FORM");
}
}
} else if (str2 != null && str2.length > 0) {// 只获取版本属性情况
DatasetParser dp = new DatasetParser(tempRev);
Vector<String> txtFileContent = dp.parsePreference(str2);
String txtFilePath = System.getenv("TEMP")
+ "\\signoff.txt";// 为了VB程序操作的方便将生成的txt文档的路径和名字写死了。
TxtFileRWHelper helper = new TxtFileRWHelper(txtFilePath);
try {
System.out.println("txtFileContent============"
+ txtFileContent);
helper.writeTxtFile(txtFileContent);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (TCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
public void openCad() {
String path = this.getClass().getProtectionDomain().getCodeSource()
.getLocation().getPath();
String exePath = path.substring(1, path.indexOf("com.connor.signoff"))
.replace("/", "\\");
exePath = exePath + "";
File file = new File(exePath);
if (file != null && file.exists()) {
System.out.println("执行注册表修改");
Runtime rn = Runtime.getRuntime();
Process p = null;
try {
p = rn.exec("\"" + exePath + "\"");
} catch (Exception e) {
System.out.println("Error exec!");
}
} else {
System.out.println("不存在" + exePath + "文件");
}
}
/*
* 解析数据集
*/
class DatasetParser {
private TCComponentItemRevision rev;
private TCComponentForm form;
public DatasetParser(TCComponentItemRevision rev, TCComponentForm form) {
this.rev = rev;
this.form = form;
}
public DatasetParser(TCComponentItemRevision rev) {
this.rev = rev;
}
// 根据首选项值获得对应对象的内容并返回需要写入txt文档中的内容
public Vector<String> parsePreference(String[] preferenceValues)
throws TCException {
Vector<String> realm_attr = new Vector<String>();// “域名=属性值”的集合
for (int i = 0; i < preferenceValues.length; i++) {
String[] obj_attrs = preferenceValues[i].split("=");
if (obj_attrs.length == 2) {
int index = obj_attrs[0].indexOf('.');
if (index != -1) {
String obj = obj_attrs[0].substring(0, index);
String att = obj_attrs[0].substring(index + 1);
StringBuffer sb = new StringBuffer(obj_attrs[1]);// 域名
sb.append("="); // =
if ("Rev".equals(obj)) { // 属性值
String value = "";
String proValue = rev.getProperty(att);
if (proValue != null)
value = proValue;
sb.append(value);
} else if ("Form".equals(obj)) {
String value = "";
String proValue = form.getProperty(att);
if (proValue != null)
value = proValue;
sb.append(value);
}
realm_attr.add(sb.toString());
} else {
return null;
}
} else {
return null;
}
}
return realm_attr;
}
}
/*
* 读写Text文档
*/
class TxtFileRWHelper {
private File txtFile = null;
private BufferedReader br = null;
private BufferedWriter bw = null;
public TxtFileRWHelper(String txtFilePath) {
this.txtFile = new File(txtFilePath);
if (!this.txtFile.exists()) {
try {
this.txtFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 读 Text文件
// 返回值Text文件内容Vector每个成员相当于一行数据
public Vector<String> readTxtFile() throws IOException {
Vector<String> txtFileContent = new Vector<String>();
br = new BufferedReader(new FileReader(txtFile));
if (!txtFile.canRead()) {
txtFile.setReadable(true);
}
String line = br.readLine();
while (line != null) {
txtFileContent.add(line);
line = br.readLine();
}
br.close();
br = null;
return txtFileContent;
}
// 写text文件
// 入参Vector<String>Vector中的每个成员作为一行数据处理
public void writeTxtFile(Vector<String> txtFileContent)
throws IOException {
bw = new BufferedWriter(new FileWriter(txtFile));
if (!txtFile.canWrite()) {
txtFile.setWritable(true);
}
for (int i = 0; i < txtFileContent.size(); i++) {
bw.write(txtFileContent.get(i));
if (i != txtFileContent.size() - 1) {
bw.write("|");
}
}
bw.close();
bw = null;
}
// 删除text 文件
public void deleteTxtFile() {
if (txtFile.exists()) {
txtFile.delete();
}
}
}
}