001    /*
002     * Copyright 2009 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.osedu.org/licenses/ECL-2.0
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    package org.kuali.student.remote.impl.mojo;
017    
018    import java.io.File;
019    import java.io.FileNotFoundException;
020    import java.io.FileOutputStream;
021    import java.io.PrintStream;
022    import org.kuali.student.contract.model.Service;
023    
024    import org.kuali.student.contract.model.ServiceContractModel;
025    import org.kuali.student.contract.model.util.ModelFinder;
026    import org.kuali.student.contract.writer.XmlWriter;
027    
028    /**
029     *
030     * @author nwright
031     */
032    public class RemoteImplServiceSpringBeanWriter {
033        
034        private ServiceContractModel model;
035        private ModelFinder finder;
036        private String directory;
037        private String rootPackage;
038        private XmlWriter out;
039        
040        public RemoteImplServiceSpringBeanWriter(ServiceContractModel model,
041                String directory,
042                String rootPackage) {
043            this.model = model;
044            this.finder = new ModelFinder(model);
045            this.directory = directory;
046            this.rootPackage = rootPackage;
047        }
048    
049        /**
050         * Write out the entire file
051         *
052         * @param out
053         */
054        public void write() {
055            initXmlWriter();
056            for (Service service : model.getServices()) {
057                writeService(service);
058            }
059        }
060        
061        private void writeService(Service service) {
062            out.println("");
063            
064            out.indentPrintln("<bean id=\"" + service.getKey().toLowerCase() + "Service\" class=\"" + RemoteImplServiceWriter.calcPackage(service.getKey(), rootPackage) + "." + RemoteImplServiceWriter.calcClassName(service.getKey()) + "\">");
065            out.incrementIndent();
066            out.indentPrintln("<property name=\"hostUrl\" value=\"http://env2.ks.kuali.org\" />");
067            out.decrementIndent();
068            out.indentPrintln("</bean>");
069            out.println("");
070            
071            out.indentPrintln("<bean id=\"ks.exp." + service.getKey().toLowerCase() + "Service\" class=\"org.kuali.rice.ksb.api.bus.support.ServiceBusExporter\">");
072            out.incrementIndent();
073            out.indentPrintln("<property name=\"serviceDefinition\">");
074            out.incrementIndent();
075            out.indentPrintln("<bean class=\"org.kuali.rice.ksb.api.bus.support.SoapServiceDefinition\">");
076            out.incrementIndent();
077            out.indentPrintln("<property name=\"jaxWsService\" value=\"true\" />");
078            out.indentPrintln("<property name=\"service\" ref=\"" + service.getKey().toLowerCase() + "Service\" />");
079            out.indentPrintln("<property name=\"serviceInterface\" value=\"" + service.getImplProject() + "." + service.getName() + "\" />");
080            out.indentPrintln("<property name=\"localServiceName\" value=\"" + service.getName() + "\" />");
081            out.indentPrintln("<property name=\"serviceNameSpaceURI\" value=\"http://student.kuali.org/wsdl/" + service.getKey().toLowerCase () + "\" />");
082            out.indentPrintln("<property name=\"busSecurity\" value=\"false\" />");
083            out.decrementIndent();
084            out.indentPrintln("</bean>");
085            out.decrementIndent();
086            out.indentPrintln("</property>");
087            out.decrementIndent();
088            out.indentPrintln("</bean>");
089        }
090        
091        private void initXmlWriter() {
092            String fileName = "ksb-remote-impl-generated.xml";
093            
094            File dir = new File(this.directory + "/main/resources");
095            
096            if (!dir.exists()) {
097                if (!dir.mkdirs()) {
098                    throw new IllegalStateException("Could not create directory "
099                            + this.directory + "/main/resources");
100                }
101            }
102            
103            String dirStr = this.directory  + "/main/resources";
104            File dirFile = new File(dirStr);
105            if (!dirFile.exists()) {
106                if (!dirFile.mkdirs()) {
107                    throw new IllegalStateException(
108                            "Could not create directory " + dirStr);
109                }
110            }
111            try {
112                PrintStream out = new PrintStream(new FileOutputStream(
113                        dirStr + "/"
114                        + fileName, false));
115                this.out = new XmlWriter(out, 0);
116            } catch (FileNotFoundException ex) {
117                throw new IllegalStateException(ex);
118            }
119        }
120    }