001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    /*
017     * Created on Mar 10, 2005
018     *
019     */
020    package org.kuali.kfs.module.purap.util.cxml;
021    
022    import java.text.SimpleDateFormat;
023    import java.util.Date;
024    
025    import org.kuali.kfs.module.purap.PurapConstants;
026    import org.kuali.kfs.module.purap.businessobject.B2BInformation;
027    import org.kuali.kfs.module.purap.util.PurApDateFormatUtils;
028    import org.kuali.kfs.sys.context.SpringContext;
029    import org.kuali.rice.kim.bo.Person;
030    import org.kuali.rice.kns.service.DateTimeService;
031    
032    public class PunchOutSetupCxml {
033      private Person user;
034      private B2BInformation b2bInformation;
035    
036      public PunchOutSetupCxml(Person u,B2BInformation b) {
037        user = u;
038        b2bInformation = b;
039      }
040    
041      /**
042       * Get cxml punch out request xml
043       * @return xml for punch out request
044       */
045      public String getPunchOutSetupRequestMessage() {
046        StringBuffer cxml = new StringBuffer();
047        Date d = SpringContext.getBean(DateTimeService.class).getCurrentDate();
048        SimpleDateFormat date = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_SIMPLE_DATE_FORMAT);
049        SimpleDateFormat time = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_SIMPLE_TIME_FORMAT);
050    
051        // doing as two parts b/c they want a T instead of space
052        // between them, and SimpleDateFormat doesn't allow putting the
053        // constant "T" in the string
054    
055        cxml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
056        cxml.append("<!DOCTYPE cXML SYSTEM \"cXML.dtd\">\n");
057        cxml.append("<cXML payloadID=\"irrelevant\" xml:lang=\"en-US\" timestamp=\"").append(date.format(d)).append("T")
058            .append(time.format(d)).append("-05:00").append("\">\n");
059    
060        // note that timezone is hard coded b/c this is the format
061        // they wanted, but SimpleDateFormat returns -0500, so rather than
062        // parse it just hard-coded
063    
064        cxml.append("  <Header>\n");
065        cxml.append("    <From>\n");
066        cxml.append("      <Credential domain=\"NetworkId\">\n");
067        cxml.append("        <Identity>").append(b2bInformation.getIdentity()).append("</Identity>\n");
068        cxml.append("      </Credential>\n");
069        cxml.append("    </From>\n");
070        cxml.append("    <To>\n");
071        cxml.append("      <Credential domain=\"DUNS\">\n");
072        cxml.append("        <Identity>").append(b2bInformation.getIdentity()).append("</Identity>\n");
073        cxml.append("      </Credential>\n");
074        cxml.append("      <Credential domain=\"internalsupplierid\">\n");
075        cxml.append("        <Identity>1016</Identity>\n");
076        cxml.append("      </Credential>\n");
077        cxml.append("    </To>\n");
078        cxml.append("    <Sender>\n");
079        cxml.append("      <Credential domain=\"TOPSNetworkUserId\">\n");
080        cxml.append("        <Identity>").append(user.getPrincipalName().toUpperCase()).append("</Identity>\n");
081        cxml.append("        <SharedSecret>").append(b2bInformation.getPassword()).append("</SharedSecret>\n");
082        cxml.append("      </Credential>\n");
083        cxml.append("      <UserAgent>").append(b2bInformation.getUserAgent()).append("</UserAgent>\n");
084        cxml.append("    </Sender>\n");
085        cxml.append("  </Header>\n");
086        cxml.append("  <Request deploymentMode=\"").append(b2bInformation.getEnvironment()).append("\">\n");
087        cxml.append("    <PunchOutSetupRequest operation=\"create\">\n");
088        cxml.append("      <BuyerCookie>").append(user.getPrincipalName().toUpperCase()).append("</BuyerCookie>\n");
089        //cxml.append(" <Extrinsic
090        // name=\"UserEmail\">jdoe@TOPS.com</Extrinsic>\n"); // we can't reliably
091        // get the e-mail address, so we're leaving it out
092        cxml.append("      <Extrinsic name=\"UniqueName\">").append(user.getPrincipalName().toUpperCase()).append("</Extrinsic>\n");
093        cxml.append("      <Extrinsic name=\"Department\">IU").append(user.getCampusCode()).append(user.getPrimaryDepartmentCode()).append("</Extrinsic>\n");
094        cxml.append("      <Extrinsic name=\"Campus\">").append(user.getCampusCode()).append("</Extrinsic>\n");
095        cxml.append("      <BrowserFormPost>\n");
096        cxml.append("        <URL>").append(b2bInformation.getPunchbackURL()).append("</URL>\n");
097        cxml.append("      </BrowserFormPost>\n");
098        cxml.append("      <Contact role=\"endUser\">\n");
099        cxml.append("        <Name xml:lang=\"en\">").append(user.getName()).append("</Name>\n");
100        //cxml.append(" <Email>jdoe@TOPS.com</Email>\n"); // again, we can't
101        // reliably get this, so we're leaving it out
102        cxml.append("      </Contact>\n");
103        cxml.append("      <SupplierSetup>\n");
104        cxml.append("        <URL>").append(b2bInformation.getPunchoutURL()).append("</URL>\n");
105        cxml.append("      </SupplierSetup>\n");
106        cxml.append("    </PunchOutSetupRequest>\n");
107        cxml.append("  </Request>\n");
108        cxml.append("</cXML>\n");
109    
110        return cxml.toString();
111      }
112    
113    }
114