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);
posted @ 2014-07-25 16:57  True.M  阅读(1303)  评论(0编辑  收藏  举报