diff options
Diffstat (limited to 'sandbox/kgoodson')
3 files changed, 38 insertions, 320 deletions
diff --git a/sandbox/kgoodson/jagg-logic/src/main/java/services/PlanView.java b/sandbox/kgoodson/jagg-logic/src/main/java/services/PlanView.java deleted file mode 100644 index ffb68270da..0000000000 --- a/sandbox/kgoodson/jagg-logic/src/main/java/services/PlanView.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package services; - -import org.oasisopen.sca.annotation.Remotable; - -import com.example.ipo.jaxb.Plan; - - - - - -@Remotable -public interface PlanView { - - Plan get(); - Plan getLite(); // don't go off to issue site - use cached properties - void postNewWorkItem(String msChoice, String jira); - void postNewMilestone(String newMSName); - -}
\ No newline at end of file diff --git a/sandbox/kgoodson/jagg-logic/src/main/java/services/PlanViewImpl.java b/sandbox/kgoodson/jagg-logic/src/main/java/services/PlanViewImpl.java deleted file mode 100644 index f9e889eb9e..0000000000 --- a/sandbox/kgoodson/jagg-logic/src/main/java/services/PlanViewImpl.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package services; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; - -import org.oasisopen.sca.annotation.Init; -import org.oasisopen.sca.annotation.Property; - -import com.example.ipo.jaxb.Item; -import com.example.ipo.jaxb.JiraData; -import com.example.ipo.jaxb.Milestone; -import com.example.ipo.jaxb.Plan; -import com.example.ipo.jaxb.RSS; -import com.example.ipo.jaxb.WorkItem; - -public class PlanViewImpl implements PlanView { - - static String rssPrefix = "http://issues.apache.org/jira/si/jira.issueviews:issue-xml/"; - @Property - public String planFile = "jiraSideBand.xml"; - - @Init - public void init() { - } - - private Plan getPlan() { - Plan p = null; - try { - p = readPlan(); - augmentPlan(p); - writePlan(p); - } catch (Exception e) { - e.printStackTrace(); - } - return p; - } - - - - private void augmentPlan(Plan plan) { - for(Milestone m : plan.getMilestone()) { - for (WorkItem wi: m.getWorkItem()) { - augmentWorkItem(wi); - - } - } - } - - private void augmentWorkItem(WorkItem wi) { - String jira = wi.getJira(); - if(jira != null) { - JiraData jd = new JiraData(); - wi.setJiraData(jd); - jd.setID(jira); - - try { - JAXBContext jaxbContext = JAXBContext - .newInstance("com.example.ipo.jaxb"); - Unmarshaller m2 = jaxbContext.createUnmarshaller(); - InputStream is = null; - RSS jfeed = null; - try{ - URL url = new URL("http://issues.apache.org/jira/si/jira.issueviews:issue-xml/"+jira+"/"+jira+".xml"); - is = url.openStream(); - jfeed = ((JAXBElement<RSS>) m2.unmarshal(is)).getValue(); - } - catch (FileNotFoundException e) { - String note = wi.getNote(); - note += ": attempt to reference non-existent JIRA " + jira; - wi.setNote(note); - wi.setJira(null); - wi.setJiraData(null); - } - finally { - if(is != null) is.close(); - } - - if(jfeed != null) { - Item i = jfeed.getChannel().getItem(); - List<JAXBElement<?>> c = i.getContent(); - // TODO see if there's a better way to get this data out - for (JAXBElement<?> element : c) { - if("title".equals(element.getName().getLocalPart())) { - String jtitle = (String)element.getValue(); - jd.setTitle(jtitle.substring(jtitle.indexOf(']')+1, jtitle.length())); - } - else if("status".equals(element.getName().getLocalPart())){ - jd.setStatus((String)element.getValue()); - } - else if("assignee".equals(element.getName().getLocalPart())) { - jd.setAssignedTo((String)element.getValue()); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - - } - } - } - - public Plan get() { - Plan p = getPlan(); - return p; - } - - public Plan getLite() { - Plan p = readPlan(); - return p; - } - - private Milestone getMS(Plan p, String id) { - - Milestone m = null; - for(Milestone mi : p.getMilestone()) { - if(id.equals(mi.getID())) { - m = mi; - break; - } - } - return m; - } - - public void postNewWorkItem(String msid, String jira) { - - Plan p = readPlan(); - Milestone m = getMS(p,msid); - WorkItem wi = new WorkItem(); - wi.setJira(jira); - augmentWorkItem(wi); - m.getWorkItem().add(wi); - writePlan(p); - } - - public void postNewMilestone(String msid) { - Plan p = readPlan(); - if(getMS(p, msid) == null) { - List<Milestone> mis = p.getMilestone(); - Milestone newm = new Milestone(); - newm.setID(msid); - mis.add(newm); - writePlan(p); - } - } - - - private void writePlan(Plan p) - { - FileOutputStream fos = null; - String dbPath = null; - File existingFile = null; - File newFile= null; - String backupPath = null; - - try { - JAXBContext jaxbContext = JAXBContext - .newInstance("com.example.ipo.jaxb"); - Marshaller m = jaxbContext.createMarshaller(); - m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); - - existingFile = new File(planFile).getAbsoluteFile(); - dbPath = existingFile.getAbsolutePath(); - - - String tempPath = dbPath.substring(0,dbPath.indexOf(".xml"))+".tmp.xml"; - backupPath = dbPath.substring(0,dbPath.indexOf(".xml")); - DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); - String timestamp = df.format(Calendar.getInstance().getTime()); - backupPath+= timestamp; - backupPath+=".xml"; - - newFile = new File(tempPath).getAbsoluteFile(); - fos = new FileOutputStream(newFile); - - - m.marshal(p, fos); - } catch (Exception e) { - e.printStackTrace(); - } finally { - - } - - - if(fos!=null) - try { - fos.close(); - - new File(dbPath).renameTo(new File(backupPath)); - newFile.renameTo(new File(dbPath)); - - - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private Plan readPlan() - { - Plan p = null; - try { - JAXBContext jaxbContext = JAXBContext - .newInstance("com.example.ipo.jaxb"); - Unmarshaller m = jaxbContext.createUnmarshaller(); - - File inputFile = new File(planFile).getAbsoluteFile(); - if(!inputFile.exists()){ // start afresh - Plan newPlan = new Plan(); - writePlan(newPlan); - inputFile = new File(planFile).getAbsoluteFile(); - } - - p = (Plan)m.unmarshal(inputFile); - } catch(Exception e) { - throw new IllegalStateException("Failed to read plan file",e); - } - return p; - } -}
\ No newline at end of file diff --git a/sandbox/kgoodson/jagg-logic/src/main/resources/JiraSideband.xsd b/sandbox/kgoodson/jagg-logic/src/main/resources/JiraSideband.xsd index 4a47372310..26ad646f28 100644 --- a/sandbox/kgoodson/jagg-logic/src/main/resources/JiraSideband.xsd +++ b/sandbox/kgoodson/jagg-logic/src/main/resources/JiraSideband.xsd @@ -20,16 +20,24 @@ <xsd:schema targetNamespace="http://www.example.com/tracking"
xmlns:jagg="http://www.example.com/tracking"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- - <xsd:element name="plan"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="issueBase" type="xsd:string" maxOccurs="1" minOccurs="0"></xsd:element> - - - <xsd:element name="milestone" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element> - </xsd:sequence> - </xsd:complexType>
+
+ <xsd:element name="plan">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="issueBase" type="xsd:string"
+ maxOccurs="1" minOccurs="0">
+ </xsd:element>
+
+
+ <xsd:element name="milestone" type="jagg:Milestone"
+ maxOccurs="unbounded" minOccurs="0">
+ </xsd:element>
+ </xsd:sequence>
+
+ <xsd:attribute name="projTitle" type="xsd:string" default="Untitled Project"></xsd:attribute>
+ <xsd:attribute name="maxWorkItemID" type="xsd:int" default="0">
+ </xsd:attribute>
+ </xsd:complexType>
</xsd:element>
@@ -43,7 +51,7 @@ <xsd:sequence>
<xsd:element name="title" type="xsd:string" maxOccurs="1"
- minOccurs="1">
+ minOccurs="0">
</xsd:element>
<xsd:element name="responsible" type="xsd:string"
maxOccurs="1" minOccurs="0">
@@ -68,7 +76,7 @@ <xsd:element name="jiraData" type="jagg:JiraData"
maxOccurs="1" minOccurs="0">
</xsd:element>
- <xsd:element name="link" type="xsd:anyURI" maxOccurs="1" minOccurs="0"></xsd:element>
+ <xsd:element name="link" type="xsd:string" maxOccurs="1" minOccurs="0"></xsd:element>
</xsd:sequence>
<xsd:attribute name="ID" type="xsd:ID"></xsd:attribute>
</xsd:complexType>
@@ -103,32 +111,32 @@ <xsd:attribute name="ID" type="xsd:string"></xsd:attribute>
</xsd:complexType>
- <xsd:complexType name="Milestones"> - <xsd:sequence> + <xsd:complexType name="Milestones">
+ <xsd:sequence>
<xsd:element name="milestone" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element>
</xsd:sequence>
</xsd:complexType>
- - <xsd:complexType name="WorkItems"> - <xsd:sequence> +
+ <xsd:complexType name="WorkItems">
+ <xsd:sequence>
<xsd:element name="workitem" type="jagg:WorkItem" maxOccurs="unbounded" minOccurs="0"></xsd:element>
</xsd:sequence>
</xsd:complexType>
- - - <xsd:complexType name="PlanDTO"> - <xsd:sequence> - <xsd:element name="milestones" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element> - <xsd:element name="workitems" type="jagg:WorkItem" maxOccurs="unbounded" minOccurs="0"></xsd:element> - </xsd:sequence> +
+
+ <xsd:complexType name="PlanDTO">
+ <xsd:sequence>
+ <xsd:element name="milestones" type="jagg:Milestone" maxOccurs="unbounded" minOccurs="0"></xsd:element>
+ <xsd:element name="workitems" type="jagg:WorkItem" maxOccurs="unbounded" minOccurs="0"></xsd:element>
+ </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="JiraData">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"></xsd:element>
- <xsd:element name="status" type="xsd:string"></xsd:element>
- <xsd:element name="assignedTo" type="xsd:string"></xsd:element>
- </xsd:sequence>
- <xsd:attribute name="ID" type="xsd:string"></xsd:attribute>
- </xsd:complexType>
- </xsd:schema>
+ <xsd:element name="status" type="xsd:string"></xsd:element>
+ <xsd:element name="assignedTo" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="ID" type="xsd:string"></xsd:attribute>
+ </xsd:complexType>
+</xsd:schema>
\ No newline at end of file |