Windchill 图文档DWG使用队列生成表示法

问题描述

解决方案

  使用队列将生成表示法的任务发送到master机器执行。相关代码如下:

package ext.zwcad.servers.from2;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import wt.content.ApplicationData;
import wt.content.ContentHelper;
import wt.content.ContentItem;
import wt.content.ContentRoleType;
import wt.content.Streamed;
import wt.epm.EPMDocument;
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.filter.NavigationCriteria;
import wt.method.RemoteAccess;
import wt.org.UserNotFoundException;
import wt.org.WTPrincipal;
import wt.pom.ObjectIsStaleException;
import wt.pom.PersistenceException;
import wt.pom.UniquenessException;
import wt.queue.ProcessingQueue;
import wt.queue.QueueHelper;
import wt.services.ManagerException;
import wt.services.StandardManager;
import wt.session.SessionContext;
import wt.session.SessionHelper;
import wt.util.WTException;

import com.ptc.wvs.common.util.WVSProperties;
import com.ptc.wvs.server.publish.PublishJob;
import com.ptc.wvs.server.publish.PublishQueueHelper;
import com.ptc.wvs.server.util.PublishUtils;

import ext.zwcad.servers.ZwServerUtil;

public class zwViewStandardManager extends StandardManager implements RemoteAccess {

    private static final long serialVersionUID = 5249640497492866903L;
    private static WVSProperties wvsProp = new WVSProperties();
    private static String RepresentationName = "Representation Name";
    private static String RepresentationDescription = "Representation Description";

    /**
     * 新建表示法 RepresentationHelper.service.emitReadyToPublishEvent(对象)
     *
     * @param WTObject
     * @param dwgFile
     * @throws WTException
     * @throws IOException
     */
    public static void transformEPMDocView(String oid)
            throws WTException, IOException {
        // System.out.println("==============transformEPMDocView==============");
        // System.out.println(epmDoc);
        // System.out.println(dwgPath);
        try {
            EPMDocument epmDoc = ZwServerUtil.findEPM(oid);
            File viewFile = getViewFile(epmDoc);
            if (null == viewFile) return;

            NavigationCriteria cri = null;
            PublishJob job = new PublishJob(true, PublishUtils
                    .getRefFromObject(epmDoc), cri, null, true, RepresentationName,
                    RepresentationDescription, 0);
            job.setNumberNameVersion(epmDoc);
            job.setProcessType(0);
            job.setRequestType(6);
            job.setRequestSource(1);
            job.setSyncInfo(null);
            String publishOptions = "<wvsoptions>tempfile=" + viewFile.getName()
                    + ",thumbnail=true" + ",origfile=" + epmDoc.getCADName();
            job.setActionFileString(publishOptions);
            job.setSubmitTime(System.currentTimeMillis());
            job.setLogFile(new File(wvsProp.getPublishTempUploadDir()
                    + File.separator + "_epm_publish.log"));

            PublishQueueHelper.addPublishEntry(job);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 生成可视化临时文件
     *
     * @param dwgFile
     * @return
     * @throws IOException
     */
    private static File getViewFile(EPMDocument doc) throws IOException {
        String fileName = doc.getCADName();
        String extension = fileName.substring(fileName.lastIndexOf("."));

        File viewFile = null;
        try {

            QueryResult qr = ContentHelper.service.getContentsByRole(doc,
                    ContentRoleType.PRIMARY);
            InputStream is = null;
            byte[] bs = null;
            while (qr.hasMoreElements()) {
                ContentItem contentitem = (ContentItem) qr.nextElement();
                ApplicationData applicationdata = (ApplicationData) contentitem;

                Streamed streamed = (Streamed) applicationdata.getStreamData()
                        .getObject();
                is = streamed.retrieveStream();
                bs = new byte[(int) applicationdata.getFileSize()];
                is.read(bs);
            }

            File file = new File(wvsProp.getPublishTempUploadDir());
            if (!file.exists()) {
                file.mkdirs();
            }
            viewFile = File.createTempFile("_" + System.currentTimeMillis(),
                    extension, new File(wvsProp.getPublishTempUploadDir()));

            FileOutputStream fos = new FileOutputStream(viewFile);
            fos.write(bs);
            fos.flush();
            fos.close();

        } catch (WTException e) {
            e.printStackTrace();
        } finally {
        }
        return viewFile;
    }

    private static final String CLASSNAME = zwViewStandardManager.class.getName();
    private static final String DATA_DELIVERY_QUEUE_NAME = "zwsoftView";
    private static int DATA_DELIVERY_QUEUE_INTERVAL=300;
    private ProcessingQueue dataDeliveryQueue;

    public static zwViewStandardManager newStandardDataDeliveryService() throws WTException {
        zwViewStandardManager service = new zwViewStandardManager();
        service.initialize();
        return service;
    }

    @Override
    protected void performStartupProcess() throws ManagerException {
//        System.out.println("============Delivery Service Starting...");

        SessionContext context = SessionContext.newContext();
        try {
            SessionHelper.manager.setAdministrator();

            dataDeliveryQueue = QueueHelper.manager.getQueue(DATA_DELIVERY_QUEUE_NAME);
            if (dataDeliveryQueue == null){
                createQueue(DATA_DELIVERY_QUEUE_NAME, DATA_DELIVERY_QUEUE_INTERVAL);
            }
        }catch (UserNotFoundException e) {
            System.err.println("Sync Service: failed to set Administrator (ok if installation)");
            SessionContext.setContext(context);
            return;
        }catch (WTException e) {
            e.printStackTrace();
            throw new ManagerException(this, "Could not initialize sync service.");
        }finally {
            SessionContext.setContext(context);
        }
    }

    public boolean sendToDeliveryQueue(EPMDocument epmDoc)
            throws WTException {
        WTPrincipal administrator=SessionHelper.manager.getAdministrator();
        if (administrator == null) {
            System.out.println("sendToDeliveryQueue: failed to set Administrator (ok if installation)");
            return false;
        }

        WTPrincipal currentUser = SessionContext.setEffectivePrincipal(administrator);
        if(dataDeliveryQueue==null){
            performStartupProcess();
        }

        if(!QueueHelper.manager.isActive(dataDeliveryQueue)){
            QueueHelper.manager.startQueue(dataDeliveryQueue);
        }

        try {
            Class<?> aclass[] = { String.class };
            Object aobj[] = { epmDoc.toString() };
            dataDeliveryQueue.addEntry(administrator, "transformEPMDocView", CLASSNAME, aclass, aobj);
        } catch (Exception exception) {
            if (exception instanceof WTException)
                throw (WTException)exception;
            else throw new WTException(exception);
        } finally {
            SessionContext.setEffectivePrincipal(currentUser);
        }

        return true;
    }

    /**
     * 创建队列
     * @param s
     * @param i
     * @return
     * @throws WTException
     */
    private ProcessingQueue createQueue(String s, int i) throws WTException {
//        System.out.println("==========createQueue=============");
        ProcessingQueue processingqueue = null;
        try {
            processingqueue = QueueHelper.manager.createQueue(s);
            QueueHelper.manager.setInterval(processingqueue, i);
            processingqueue = (ProcessingQueue)PersistenceHelper.manager.save(processingqueue);
        } catch (ObjectIsStaleException objectisstaleexception) {
            processingqueue = QueueHelper.manager.getQueue(s);
        } catch (UniquenessException uniquenessexception) {
            processingqueue = QueueHelper.manager.getQueue(s);
        } catch (PersistenceException persistenceexception) {
            processingqueue = QueueHelper.manager.getQueue(s);
        }

        return processingqueue;
    }
}

调用方法

        zwViewStandardManager server = zwViewStandardManager.newStandardDataDeliveryService();
        server.sendToDeliveryQueue(epm);

Windchill 图文档DWG使用队列生成表示法,布布扣,bubuko.com

时间: 2024-10-25 21:41:37

Windchill 图文档DWG使用队列生成表示法的相关文章

ArcGIS地图文档MXD效率慢的一点建议(二)

经常有用户询问,我的MXD图层比较多,而且配置好了相关的符号,但是我的服务器更换了一下,而且两个服务器的要素类名称都是一样的,我想配置一下新的数据源,而且我的这个MXD已经连接不到原来的数据源了,打开这个MXD,要花费很长时间,请问有什么可以避免的么? 因为这种情况下,打开MXD的时候,会查询数据源,特别是SDE数据源,如果找不到MXD记录的相关参数信息,系统会默认一直在找相应的IP(也可以理解一直在Ping),而且也会寻找你们局域网里面的所有机器,那么如果数据图层比较多,这个时间肯定会比较长的

ArcGIS Engine开发之地图文档保存

在对地图文档进行修改后,经常需要对其进行保存.地图文档的保存有直接保存和另存为两种方式.这里的地图文档的修改指的是修改地图文档文件记录信息,不是对空间数据的编辑. 1.地图文档保存 具体实现的思路: 1)地图文档的保存主要使用IMapDocument接口,首先使用IMxdContents接口读取已打开的地图文档的内容,并使之替换IMapDocument接口的实例对象. 2)保存时使用IMapDocument接口的Save方法,函数原型为 public void Save (bool)bUsere

ArcGIS自定义工具箱-显示地图文档结构

联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:显示地图文档mxd的数据组织结构,数据框,图层,表 使用方法: 地图文档为可选参数,默认值表示当前地图文档 结果: 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 原文地址:https://www.cnblogs.com/xiexiaokui/p/10340016.html

ArcPy开发教程2-管理地图文档1

联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com ArcPy开发教程2-管理地图文档1 第二次课:2019年2月26日上午第二节 讲解: 地图文档:Map document mxd,Ch2/*.mxd Arcpy制图模块arcpy.mapping 案例:修改地图文档标题并保存副本 作业: 1. 在arcmap打开ch2/*.mxd,然后使用arcpy/python修改标题并保存,最后查看保存的结果.要求手写代码,并在ArcGIS Python窗口运行 技术路线:

JS文档和Demo自动化生成工具 - SmartDoc发布

曾几何时,当你码神附体,一路披荆斩棘的完成代码后,带着“一码在手,天下我有”的傲然环顾之时,却发现单元测试.API文档.Demo实例陆续向你砸来,顿时有木有一种冰水挑战后的感觉.而这时你应该:哟哟,快使用SmartDoc: SmartDoc, 一个基于NodeJS的自动化文档生成工具,她拥有明眸的双眼(yuidoc引擎),华丽的外衣(bootstrap 3风格),灵巧的双手(demo生成,codemirror代码编辑,jasmine接口兼容);拥有她,相信你一定会仰天长啸:"小伙伴们再也不用担心

FreeRTOS官方翻译文档——第二章 队列管理

2.1 概览基于 FreeRTOS 的应用程序由一组独立的任务构成--每个任务都是具有独立权限的小程序.这些独立的任务之间很可能会通过相互通信以提供有用的系统功能.FreeRTOS 中所有的通信与同步机制都是基于队列实现的. 2.2队列的特性数据存储队列可以保存有限个具有确定长度的数据单元.队列可以保存的最大单元数目被称为队列的"深度".在队列创建时需要设定其深度和每个单元的大小.通常情况下,队列被作为 FIFO(先进先出)使用,即数据由队列尾写入,从队列首读出.当然,由队列首写入也是

ArcMap批量发布地图文档python脚本小工具

这是工具打开后的界面图,可以实现多个文档的同时发布(这个工具适用于不想每个要发布的地图都去点击"共享"->"服务"的懒人) 工具下载地址: https://files.cnblogs.com/files/hongdanni/PublishMapService.rar

[程序员代码面试指南]栈和队列-生成窗口最大值数组(双端队列)

问题描述 输入数组arr={4,3,5,4,3,3,6,7},窗口大小w=3,窗口由左向右移动,输出每个窗口最大值组成的数组. 解题思路 数据结构:使用ArrayList模拟双端队列. 遍历一遍arr,时间复杂度O(n).具体地, 队列队尾的位置对应的元素若不比当前位置对应元素大,则弹出,否则,将当前元素入队. -每次检查队首元素下标是否已超出以当前位置为结尾的窗口,超出则出队. 代码 import java.util.LinkedList; public class Main { public

Java帮助文档的编写和生成

/** *对这个类或方法加入文档注释*@author 作者*@version 版本*...*@param 参数 参数说明*@return 返回值说明 解析帮助文档产生的错误总结: 问题提示:找不到可以文档化的公共或受保护的类 问题:权限不够 解决方法:将要解析的类定义为public 问题提示:警告:@param未说明 问题:参数忘记加参数说明 解决方法:给@param参数添加参数说明 例如:@param player 游戏boy 原文地址:https://www.cnblogs.com/jiji