Skip to content

Commit 72c5cb2

Browse files
committedJun 5, 2019
first commit
0 parents  commit 72c5cb2

File tree

19 files changed

+489
-0
lines changed

19 files changed

+489
-0
lines changed
 

‎CatalogUploadRequestv2-1.0.jar

7.99 KB
Binary file not shown.

‎config.properties

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
XMLVersion = 1.2.025
2+
XMLLang = en-US
3+
4+
operationType = update
5+
fromIdentityValue = AN01050855178-T
6+
toIdentityValue = AN01001052340-T
7+
domainType = NetworkID
8+
9+
sharedSecretValue = ARIBA123
10+
11+
senderIdentityValue = AN01050855178-T
12+
catalogNameValue = TEST_CATALOG2
13+
catalogDescription = Catalog Description
14+
attachmentURLValue = attachment
15+
16+
autoPublishEnabled = true
17+
URLPostEnabled = true
18+
emailAddress = paulo.calvo@sap.com
19+
20+
userAgentValue = User Agent v1.0
21+
22+
23+
# Post
24+
25+
URL = https://service.ariba.com/ANCatalogProcessor.aw/ad/catalog
26+
#URL = http://localhost:1080
27+
userAgent = some user agent

‎config.template.properties

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
XMLVersion = 1.2.025
2+
XMLLang = en-US
3+
4+
operationType = update
5+
fromIdentityValue = supplier ANID
6+
senderIdentityValue = supplier ANID
7+
toIdentityValue = buyer ANID
8+
domainType = NetworkID
9+
10+
sharedSecretValue = some shared secret
11+
12+
13+
catalogNameValue = catalog subscription name
14+
catalogDescription = Catalog Description
15+
attachmentURLValue = attachment
16+
17+
autoPublishEnabled = true
18+
URLPostEnabled = true
19+
emailAddress = email@email.com
20+
21+
userAgentValue = User Agent v1.0
22+
23+
24+
# Post
25+
26+
#URL = https://service.ariba.com/ANCatalogProcessor.aw/ad/catalog
27+
URL = http://localhost:1080
28+
userAgent = some user agent

‎files/CatalogUploadRequest.xml

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.033/cXML.dtd">
3+
<cXML payloadID="1559762482387" timestamp="2019-06-05 13:21:22.391" version="1.2.025" xml:lang="en-US">
4+
<Header>
5+
<From>
6+
<Credential domain="NetworkID">
7+
<Identity>AN01050855178-T</Identity>
8+
</Credential>
9+
</From>
10+
<To>
11+
<Credential domain="NetworkID">
12+
<Identity>AN01001052340-T</Identity>
13+
</Credential>
14+
</To>
15+
<Sender>
16+
<Credential domain="NetworkID">
17+
<Identity>AN01050855178-T</Identity>
18+
<SharedSecret>ARIBA123</SharedSecret>
19+
</Credential>
20+
<UserAgent>User Agent v1.0</UserAgent>
21+
</Sender>
22+
</Header>
23+
<Request>
24+
<CatalogUploadRequest operation="update">
25+
<CatalogName xml:lang="en-US">TEST_CATALOG2</CatalogName>
26+
<Description xml:lang="en-US">Catalog Description</Description>
27+
<Attachment>
28+
<URL>cid:attachment</URL>
29+
</Attachment>
30+
<AutoPublish enabled="true"/>
31+
<Notification>
32+
<Email>paulo.calvo@sap.com</Email>
33+
<URLPost enabled="true"/>
34+
</Notification>
35+
</CatalogUploadRequest>
36+
</Request>
37+
</cXML>

‎files/catalog.cif

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
this is a CIF

‎files/catalog_1.cif

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
CIF_I_V3.0
2+
LOADMODE: F
3+
CODEFORMAT: UNSPSC_V13.5
4+
CURRENCY: USD
5+
SUPPLIERID_DOMAIN: DUNS
6+
UNUOM: TRUE
7+
COMMENTS: Example catalog of office products
8+
CHARSET: Cp1252
9+
ITEMCOUNT: 13
10+
TIMESTAMP: 2013-2-20 13:00:00
11+
FIELDNAMES: Supplier ID,Supplier Part ID,Manufacturer Part ID,Item Description,SPSC Code,Unit Price,Unit of Measure,Lead Time,Manufacturer Name,Supplier URL,Manufacturer URL,Market Price,Short Name,Currency,Price Segment,Price Unit Quantity,Price Unit,Unit Conversion,Pricing Description
12+
DATA
13+
12345678,28329,E016,"Round-Ring Presentation View Binder, Concealed Rivets, 1"" Capacity, White",44122003,7.03,EA,1,EXP,http://biggco.com/ceproducts.asp?cim=2811329,,7.03,Thin Binder,USD,{Division=Corporate},1,BX,0.2,"Price quoted for a box"
14+
12345678,28333,E017,"Round-Ring Presentation View Binder, Concealed Rivets, 1-1/2"" Capacity, White",44122003,8.89,EA,1,EXP,http://biggco.com/ceproducts.asp?cim=2811333,,8.89,Medium Binder,USD,{Division=Corporate}
15+
12345678,28341,E018,"Round-Ring Presentation View Binder, Concealed Rivets, 2"" Capacity, White",44122003,10.29,EA,1,EXP,http://biggco.com/ceproducts.asp?cim=2811341,,10.29,Thick Binder,USD,{Division=Corporate}
16+
12345678,50238,M105,"Scotch Magic Tape with Dispenser, Refillable, 3/4"" x 300""",31201512,1.27,RL,1,MMM/Commercial Division,http://biggco.com/ceproducts.asp?cim=5010238,,1.27,Scotch Tape with Dispenser,USD,{Division=Corporate}
17+
12345678,51278,M03PK,"Post-It Flags, 3-Pack: Red, Blue and Yellow ""Sign Here"" with Refill Dispenser",14111530,7.38,PK,1,MMM/Commercial Division,http://biggco.com/ceproducts.asp?cim=5123278,,7.38,Post-It Flags ""Sign Here"",USD,{Division=Corporate}
18+
12345678,52750,L27075,"Rubber Bands, Size 107, 7"" x 5/8"", 1 Pound Box",44122101,4.39,BX,1,Alliance Rubber,http://biggco.com/ceproducts.asp?cim=5270750,,4.39,Medium Rubber Bands,USD,{Division=Manufacturing},1,BX,0.1,"Price quoted for a box"
19+
12345678,56317,S63118,"Textliter Fluorescent Highlighter, Yellow",44121716,1.75,EA,1,Sanford,http://biggco.com/ceproducts.asp?cim=5630017,,1.75,Yellow Highlighter,USD,{Division=Manufacturing}
20+
12345678,56326,S63119,"Textliter Fluorescent Highlighter, Blue",44121716,1.75,EA,1,Sanford,http://biggco.com/ceproducts.asp?cim=5630026,,1.75,Blue Highlighter,USD,{Division=Manufacturing}
21+
12345678,56334,S63120,"Textliter Fluorescent Highlighter, Green",44121716,1.75,EA,1,Sanford,http://biggco.com/ceproducts.asp?cim=5630034,,1.75,Green Highlighter,USD,{Division=Manufacturing}
22+
12345678,56359,S63122,"Textliter Fluorescent Highlighter, Orange",44121716,1.75,EA,1,Sanford,http://biggco.com/ceproducts.asp?cim=5630059,,1.75,Orange Highlighter,USD,{Division=Manufacturing}
23+
12345678,56366,S63123,"Textliter Fluorescent Highlighter, Pink",44121716,1.75,EA,1,Sanford,http://biggco.com/ceproducts.asp?cim=5630066,,1.75,Pink Highglighter,USD,{Division=Manufacturing}
24+
12345678,56415,S25HGN,"Colored Hanging Folders, 1/5 Cut, Legal - Green, 25/Box",44122017,19.25,BX,1,Smead Mfg. Co.,http://biggco.com/ceproducts.asp?cim=5641615,,19.25,Legal Hanging Folders,USD,{Division=Manufacturing}
25+
12345678,5992548,N98T,"7900 Series Everyday Clerical Chair, Upholstered Optional Arm Pack, Blue",56112102,44.00,ST,1,Hon Company,http://biggco.com/ceproducts.asp?cim=5992548,,44,Blue Clerical Chair,USD,{Division=Manufacturing}
26+
ENDOFDATA

‎nbactions.xml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<actions>
3+
<action>
4+
<actionName>run</actionName>
5+
<packagings>
6+
<packaging>jar</packaging>
7+
</packagings>
8+
<goals>
9+
<goal>process-classes</goal>
10+
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
11+
</goals>
12+
<properties>
13+
<exec.args>-classpath %classpath com.cataloguploadrequestv2.Main</exec.args>
14+
<exec.executable>java</exec.executable>
15+
</properties>
16+
</action>
17+
</actions>

‎pom.xml

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>com</groupId>
5+
<artifactId>CatalogUploadRequestv2</artifactId>
6+
<version>1.0</version>
7+
<packaging>jar</packaging>
8+
<build>
9+
<plugins>
10+
<plugin>
11+
<groupId>org.apache.maven.plugins</groupId>
12+
<artifactId>maven-assembly-plugin</artifactId>
13+
<version>3.1.1</version>
14+
<configuration>
15+
<archive>
16+
<manifest>
17+
<mainClass>com.cataloguploadrequestv2.Main</mainClass>
18+
</manifest>
19+
</archive>
20+
<descriptorRefs>
21+
<descriptorRef>jar-with-dependencies</descriptorRef>
22+
</descriptorRefs>
23+
</configuration>
24+
</plugin>
25+
</plugins>
26+
</build>
27+
<dependencies>
28+
<dependency>
29+
<groupId>org.apache.httpcomponents</groupId>
30+
<artifactId>httpcore</artifactId>
31+
<version>4.4.6</version>
32+
<type>jar</type>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.apache.httpcomponents</groupId>
36+
<artifactId>httpclient</artifactId>
37+
<version>4.5.3</version>
38+
<type>jar</type>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.apache.httpcomponents</groupId>
42+
<artifactId>httpmime</artifactId>
43+
<version>4.5.3</version>
44+
<type>jar</type>
45+
</dependency>
46+
</dependencies>
47+
<properties>
48+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
49+
<maven.compiler.source>1.8</maven.compiler.source>
50+
<maven.compiler.target>1.8</maven.compiler.target>
51+
</properties>
52+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.cataloguploadrequestv2;
2+
3+
import java.io.IOException;
4+
import javax.xml.bind.JAXBException;
5+
import javax.xml.parsers.ParserConfigurationException;
6+
import javax.xml.transform.TransformerException;
7+
8+
public class Main {
9+
10+
public static void main(String[] args) throws JAXBException, IOException, ParserConfigurationException, TransformerException {
11+
12+
cXMLBuilder cb = new cXMLBuilder();
13+
cb.createcXML();
14+
15+
Post p = new Post();
16+
p.HttpPost();
17+
18+
}
19+
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.cataloguploadrequestv2;
2+
3+
import java.io.BufferedReader;
4+
import java.io.File;
5+
import java.io.FileInputStream;
6+
import java.io.FileNotFoundException;
7+
import java.io.IOException;
8+
import java.io.InputStreamReader;
9+
import java.util.Properties;
10+
import java.util.logging.Level;
11+
import java.util.logging.Logger;
12+
import org.apache.http.HttpEntity;
13+
import org.apache.http.HttpResponse;
14+
import org.apache.http.client.methods.HttpPost;
15+
import org.apache.http.entity.mime.FormBodyPartBuilder;
16+
import org.apache.http.entity.mime.MultipartEntityBuilder;
17+
import org.apache.http.entity.mime.content.FileBody;
18+
import org.apache.http.impl.client.CloseableHttpClient;
19+
import org.apache.http.impl.client.HttpClientBuilder;
20+
21+
public class Post {
22+
23+
public void HttpPost() {
24+
25+
try {
26+
Properties properties = new Properties();
27+
FileInputStream input = new FileInputStream("config.properties");
28+
properties.load(input);
29+
30+
String URL = properties.getProperty("URL");
31+
String userAgent = properties.getProperty("userAgent");
32+
33+
34+
try {
35+
CloseableHttpClient client = HttpClientBuilder.create().build();
36+
HttpPost httpPost = new HttpPost(URL);
37+
httpPost.setHeader("User-Agent", userAgent);
38+
39+
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
40+
41+
FormBodyPartBuilder part1 = FormBodyPartBuilder.create()
42+
.setName("cXML Name")
43+
.setField("Content-Type", "text/xml")
44+
.setBody(new FileBody(new File("files/CatalogUploadRequest.xml")));
45+
46+
FormBodyPartBuilder part2 = FormBodyPartBuilder.create()
47+
.setName("CIF")
48+
.setField("Content-Type", "text/plain")
49+
.setBody(new FileBody(new File("files/catalog_1.cif")));
50+
51+
builder.addPart(part1.build());
52+
builder.addPart(part2.build());
53+
54+
httpPost.setEntity(builder.build());
55+
56+
HttpEntity entity = httpPost.getEntity();
57+
58+
HttpResponse response = client.execute(httpPost);
59+
60+
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
61+
62+
while (reader.readLine() != null) {
63+
System.out.println(reader.readLine());
64+
}
65+
System.out.println(response.getStatusLine());
66+
System.out.println(response.toString());
67+
68+
69+
} catch (IOException ex) {
70+
Logger.getLogger(Post.class.getName()).log(Level.SEVERE, null, ex);
71+
}
72+
73+
} catch (FileNotFoundException ex) {
74+
Logger.getLogger(Post.class.getName()).log(Level.SEVERE, null, ex);
75+
} catch (IOException ex) {
76+
Logger.getLogger(Post.class.getName()).log(Level.SEVERE, null, ex);
77+
}
78+
79+
}
80+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
package com.cataloguploadrequestv2;
2+
3+
import java.io.File;
4+
import java.io.FileInputStream;
5+
import java.io.FileNotFoundException;
6+
import java.io.IOException;
7+
import java.sql.Timestamp;
8+
import java.util.Properties;
9+
import javax.xml.parsers.*;
10+
import javax.xml.transform.*;
11+
import javax.xml.transform.dom.DOMSource;
12+
import javax.xml.transform.stream.StreamResult;
13+
import org.w3c.dom.DOMImplementation;
14+
import org.w3c.dom.Document;
15+
import org.w3c.dom.DocumentType;
16+
import org.w3c.dom.Element;
17+
18+
public class cXMLBuilder {
19+
20+
public void createcXML() throws ParserConfigurationException, TransformerConfigurationException, TransformerException, FileNotFoundException, IOException {
21+
22+
Properties properties = new Properties();
23+
FileInputStream input = new FileInputStream("config.properties");
24+
properties.load(input);
25+
26+
String XMLVersion = properties.getProperty("XMLVersion");
27+
String XMLLang = properties.getProperty("XMLLang");
28+
String operationType = properties.getProperty("operationType");
29+
String fromIdentityValue = properties.getProperty("fromIdentityValue");
30+
String toIdentityValue = properties.getProperty("toIdentityValue");
31+
String domainType = properties.getProperty("domainType");
32+
String sharedSecretValue = properties.getProperty("sharedSecretValue");
33+
String senderIdentityValue = properties.getProperty("senderIdentityValue");
34+
String catalogNameValue = properties.getProperty("catalogNameValue");
35+
String catalogDescription = properties.getProperty("catalogDescription");
36+
String attachmentURLValue = properties.getProperty("attachmentURLValue");
37+
String autoPublishEnabled = properties.getProperty("autoPublishEnabled");
38+
String URLPostEnabled = properties.getProperty("URLPostEnabled");
39+
String emailAddress = properties.getProperty("emailAddress");
40+
String userAgentValue = properties.getProperty("userAgentValue");
41+
42+
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
43+
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
44+
Document doc = dBuilder.newDocument();
45+
doc.setXmlStandalone(true);
46+
47+
DOMImplementation domImpl = doc.getImplementation();
48+
DocumentType docType = domImpl.createDocumentType("doctype", "", "http://xml.cXML.org/schemas/cXML/1.2.033/cXML.dtd");
49+
50+
// cXML root element
51+
Element rootElement = doc.createElement("cXML");
52+
rootElement.setAttribute("payloadID", createPayload());
53+
rootElement.setAttribute("timestamp", createTimeStamp());
54+
//rootElement.setAttribute("version", XMLVersion);
55+
rootElement.setAttribute("version", XMLVersion);
56+
rootElement.setAttribute("xml:lang", XMLLang);
57+
doc.appendChild(rootElement);
58+
59+
// Header
60+
Element header = doc.createElement("Header");
61+
rootElement.appendChild(header);
62+
63+
// From Identity
64+
Element from = doc.createElement("From");
65+
header.appendChild(from);
66+
Element fromIdentity = doc.createElement("Identity");
67+
fromIdentity.appendChild(doc.createTextNode(fromIdentityValue));
68+
69+
Element fromCredential = doc.createElement("Credential");
70+
fromCredential.setAttribute("domain", domainType);
71+
72+
fromCredential.appendChild(fromIdentity);
73+
from.appendChild(fromCredential);
74+
75+
// To Identity
76+
Element To = doc.createElement("To");
77+
header.appendChild(To);
78+
Element toIdentity = doc.createElement("Identity");
79+
toIdentity.appendChild(doc.createTextNode(toIdentityValue));
80+
81+
Element toCredential = doc.createElement("Credential");
82+
toCredential.setAttribute("domain", domainType);
83+
84+
toCredential.appendChild(toIdentity);
85+
To.appendChild(toCredential);
86+
87+
// Sender
88+
Element sender = doc.createElement("Sender");
89+
header.appendChild(sender);
90+
Element senderCredential = doc.createElement("Credential");
91+
senderCredential.setAttribute("domain", domainType);
92+
93+
Element senderIdentity = doc.createElement("Identity");
94+
senderIdentity.appendChild(doc.createTextNode(senderIdentityValue));
95+
96+
senderCredential.appendChild(senderIdentity);
97+
98+
sender.appendChild(senderCredential);
99+
100+
Element sharedSecret = doc.createElement("SharedSecret");
101+
sharedSecret.appendChild(doc.createTextNode(sharedSecretValue));
102+
103+
senderCredential.appendChild(sharedSecret);
104+
105+
// User Agent
106+
Element userAgent = doc.createElement("UserAgent");
107+
108+
sender.appendChild(userAgent);
109+
userAgent.appendChild(doc.createTextNode(userAgentValue));
110+
111+
// Request Element
112+
Element request = doc.createElement("Request");
113+
rootElement.appendChild(request);
114+
115+
// CatalogUploadRequest
116+
Element catalogUploadRequest = doc.createElement("CatalogUploadRequest");
117+
catalogUploadRequest.setAttribute("operation", operationType);
118+
119+
request.appendChild(catalogUploadRequest);
120+
121+
// Catalog Name
122+
Element catalogName = doc.createElement("CatalogName");
123+
catalogName.setAttribute("xml:lang", XMLLang);
124+
catalogName.appendChild(doc.createTextNode(catalogNameValue));
125+
126+
catalogUploadRequest.appendChild(catalogName);
127+
128+
// Description
129+
Element description = doc.createElement("Description");
130+
description.setAttribute("xml:lang", XMLLang);
131+
description.appendChild(doc.createTextNode(catalogDescription));
132+
133+
catalogUploadRequest.appendChild(description);
134+
135+
// Attachment
136+
Element attachment = doc.createElement("Attachment");
137+
138+
catalogUploadRequest.appendChild(attachment);
139+
140+
// Attachment URL
141+
Element attachmentURL = doc.createElement("URL");
142+
attachmentURL.appendChild(doc.createTextNode("cid:" + attachmentURLValue));
143+
144+
attachment.appendChild(attachmentURL);
145+
146+
// Auto Publish
147+
Element autoPublish = doc.createElement("AutoPublish");
148+
autoPublish.setAttribute("enabled", autoPublishEnabled);
149+
catalogUploadRequest.appendChild(autoPublish);
150+
151+
// Notification
152+
Element notification = doc.createElement("Notification");
153+
catalogUploadRequest.appendChild(notification);
154+
155+
// Email
156+
Element email = doc.createElement("Email");
157+
email.appendChild(doc.createTextNode(emailAddress));
158+
notification.appendChild(email);
159+
160+
// Notification URL Post
161+
Element urlPost = doc.createElement("URLPost");
162+
urlPost.setAttribute("enabled", URLPostEnabled);
163+
164+
notification.appendChild(urlPost);
165+
166+
// Output
167+
TransformerFactory transformerFactory = TransformerFactory.newInstance();
168+
Transformer transformer = transformerFactory.newTransformer();
169+
StreamResult consoleResult = new StreamResult(System.out);
170+
DOMSource source = new DOMSource(doc);
171+
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, docType.getSystemId());
172+
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
173+
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
174+
175+
Result output = new StreamResult(new File("files/CatalogUploadRequest.xml"));
176+
transformer.transform(source, output);
177+
178+
}
179+
180+
public String createPayload() {
181+
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
182+
return String.valueOf(timestamp.getTime());
183+
}
184+
185+
public String createTimeStamp() {
186+
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
187+
return timestamp.toString();
188+
}
189+
190+
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

‎target/maven-archiver/pom.properties

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#Generated by Maven
2+
#Wed Jun 05 13:17:52 CST 2019
3+
version=1.0
4+
groupId=com
5+
artifactId=CatalogUploadRequestv2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
com/cataloguploadrequestv2/Main.class
2+
com/cataloguploadrequestv2/cXMLBuilder.class
3+
com/cataloguploadrequestv2/Post.class
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/Users/paulo/Projects/CatalogUploadRequestv2/src/main/java/com/cataloguploadrequestv2/Post.java
2+
/Users/paulo/Projects/CatalogUploadRequestv2/src/main/java/com/cataloguploadrequestv2/cXMLBuilder.java
3+
/Users/paulo/Projects/CatalogUploadRequestv2/src/main/java/com/cataloguploadrequestv2/Main.java

‎target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst

Whitespace-only changes.

0 commit comments

Comments
 (0)
Please sign in to comment.