Skip to content

Commit 0d63503

Browse files
authored
Merge pull request #15 from odoo-java/v14-migration-adn-tests
[WIP ]Support of Odoo v14
2 parents 6207c00 + ca0e843 commit 0d63503

File tree

11 files changed

+444
-365
lines changed

11 files changed

+444
-365
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.odoojava</groupId>
77
<artifactId>odoo-java-api</artifactId>
8-
<version>3.1.7</version>
8+
<version>3.1.8</version>
99
<packaging>jar</packaging>
1010

1111
<name>odoo-java-api</name>

src/main/java/com/odoojava/api/OdooCommand.java

Lines changed: 83 additions & 77 deletions
Large diffs are not rendered by default.

src/main/java/com/odoojava/api/ReportAdapter.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,13 @@
2121
import java.io.File;
2222
import java.io.FileOutputStream;
2323
import java.io.IOException;
24-
import java.net.URL;
25-
import java.nio.charset.Charset;
2624
import java.nio.charset.StandardCharsets;
27-
import java.text.SimpleDateFormat;
2825
import java.util.ArrayList;
29-
import java.util.Collections;
3026
import java.util.Arrays;
31-
import java.util.Date;
3227
import java.util.HashMap;
33-
import java.util.List;
34-
import java.util.Map;
35-
import java.util.Map.Entry;
36-
import java.util.TimeZone;
37-
import java.util.concurrent.ConcurrentHashMap;
38-
import java.util.stream.Collectors;
39-
import java.util.stream.Stream;
40-
41-
import javax.xml.bind.DatatypeConverter;
4228

4329
import org.apache.xmlrpc.XmlRpcException;
4430

45-
import com.googlecode.jsonrpc4j.JsonRpcHttpClient;
46-
import com.odoojava.api.Field.FieldType;
47-
import com.odoojava.api.helpers.FilterHelper;
4831

4932
/**
5033
*
@@ -201,8 +184,6 @@ public String PrintReportToFileName(Object[] ids) throws IOException, XmlRpcExce
201184
FileOutputStream report_stream = new FileOutputStream(tmp_file);
202185
try {
203186
report_bytes = getPDFReportAsByte(reportName, ids);
204-
205-
206187
report_stream.write(report_bytes);
207188
} catch (Throwable e) {
208189
// TODO Auto-generated catch block

src/main/java/com/odoojava/api/Session.java

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,18 @@ public class Session {
7171

7272
private URL jsonurl;
7373
private JsonRpcHttpClient jsonclient;
74-
private Object[] login_args;
74+
// private Object[] login_args;
7575

7676
public URL getJsonurl(String entryPoint) {
7777
String protocol_str = "";
7878
switch (this.protocol) {
79-
case RPC_HTTP:
80-
protocol_str = "http";
81-
break;
79+
case RPC_HTTP:
80+
protocol_str = "http";
81+
break;
8282

83-
default:
84-
protocol_str = "https";
85-
break;
83+
default:
84+
protocol_str = "https";
85+
break;
8686
}
8787

8888
URL urljson;
@@ -183,8 +183,8 @@ public void startSession() throws Exception {
183183

184184
private void checkVersionCompatibility() throws XmlRpcException, OdooApiException {
185185

186-
if (this.getServerVersion().getMajor() < 8 || this.getServerVersion().getMajor() > 13) {
187-
throw new OdooApiException("Only Odoo Version from v8.x to 13.x are maintained. "
186+
if (this.getServerVersion().getMajor() < 8 || this.getServerVersion().getMajor() > 14) {
187+
throw new OdooApiException("Only Odoo Version from v8.x to 14.x are maintained. "
188188
+ "Please choose another version of the library");
189189
}
190190

@@ -226,20 +226,12 @@ int authenticate() throws XmlRpcException, Exception {
226226
System.out.println("json rpc login");
227227

228228
} catch (JsonRpcClientException e) {
229-
// TODO Auto-generated catch block
230-
String exc = e.getMessage();
231229
System.out.println("Json rpc issue possibly caused by https://github.com/OCA/server-tools/issues/1237");
232-
233-
230+
e.printStackTrace();
234231
} catch (Throwable e) {
235-
// TODO Auto-generated catch block
236-
237232
System.out.println("General exception");
238233
e.printStackTrace();
239-
}
240-
finally {
241-
System.out.println("something bad potentially happened during connexion through JsonRPC");
242-
}
234+
}
243235

244236
if (id instanceof Integer) {
245237
userID = (Integer) id;
@@ -251,21 +243,19 @@ int authenticate() throws XmlRpcException, Exception {
251243
}
252244

253245
private int authenticate_json_rpc() throws Throwable {
254-
// TODO: fast and uggly implementation of json rpc, has to be reafctored in the
246+
// TODO: fast and uggly implementation of json rpc, has to be refactored in the
255247
// future
256248

257249
Map<String, String> articleMapOne = new HashMap<>();
258250
articleMapOne.put("password", password);
259251
articleMapOne.put("login", userName);
260252
articleMapOne.put("db", databaseName);
261253

262-
// Object[] result = call_json_rpc(, "common", "login", articleMapOne);
254+
// Object[] result = call_json_rpc(, "common", "login", articleMapOne);
263255

264256
jsonclient.setServiceUrl(getJsonurl("web/session/authenticate"));
265257

266-
Map<String, Object> result = jsonclient.invoke("call", articleMapOne, HashMap.class);
267-
// Object[] result = jsonclient.readResponse(clazz, input);
268-
// result.get
258+
Map<String, Object> result = jsonclient.invoke("call", articleMapOne, HashMap.class);
269259
return (int) result.get("uid");
270260
}
271261

@@ -466,9 +456,13 @@ public Object executeCommandWithContext(final String objectName, final String co
466456
*/
467457
public void executeWorkflow(final String objectName, final String signal, final int objectID)
468458
throws XmlRpcException {
469-
Object[] params = new Object[] { databaseName, userID, password, objectName, signal, objectID };
470459

471-
objectClient.execute("exec_workflow", params);
460+
if (serverVersion.getMajor() <= 10) {
461+
Object[] params = new Object[] { databaseName, userID, password, objectName, signal, objectID };
462+
objectClient.execute("exec_workflow", params);
463+
} else {
464+
System.out.println("exec_workflow is not supported in Odoo versions > 10");
465+
}
472466
}
473467

474468
/**

src/test/java/com/odoojava/api/ObjectAdapterTest.java

Lines changed: 111 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,44 @@
11
package com.odoojava.api;
22

3-
import com.odoojava.api.Response;
4-
import com.odoojava.api.OdooApiException;
5-
import com.odoojava.api.Row;
6-
import com.odoojava.api.OdooCommand;
7-
import com.odoojava.api.ObjectAdapter;
8-
import com.odoojava.api.FieldCollection;
93
import static org.assertj.core.api.Assertions.assertThat;
104
import static org.assertj.core.api.Assertions.catchThrowable;
5+
import com.odoojava.api.DemoDbGetter.DemoDbInfoRequester;
6+
import com.odoojava.api.OdooXmlRpcProxy.RPCProtocol;
117

128
import java.util.HashMap;
139

1410
import org.apache.xmlrpc.XmlRpcException;
1511
import org.assertj.core.api.SoftAssertions;
12+
import org.junit.BeforeClass;
1613
import org.junit.Test;
1714

1815
public class ObjectAdapterTest {
1916
private static final String OTHER_SIGNAL_NAME = "otherSignalName";
2017
private static final String OTHER_MODEL_NAME = "otherModel";
2118
private static final String TEST_MODEL_NAME = "testModelName";
2219
private static final String TEST_SIGNAL_NAME = "signal";
20+
private static RPCProtocol protocol;
21+
private static String host;
22+
private static Integer port;
23+
private static String databaseName;
24+
private static String userName;
25+
private static String password;
26+
27+
private static Session session;
2328

2429
boolean validated = false;
2530

31+
@BeforeClass
32+
public static void setUp() throws Exception {
33+
DemoDbGetter.getDemoDb(new DemoDbConnectionDataSetter());
34+
session = new Session(protocol,
35+
host, port, databaseName, userName,password);
36+
37+
session.startSession();
38+
}
39+
40+
41+
2642
private final class TestAdapter extends ObjectAdapter {
2743

2844
public TestAdapter() throws OdooApiException, XmlRpcException {
@@ -39,7 +55,10 @@ public FieldCollection getFields() throws XmlRpcException {
3955
return null;
4056
}
4157
}
58+
59+
4260

61+
4362
private abstract class AbstractTestCommand extends OdooCommand {
4463
boolean searchCalledOnce = false;
4564
boolean searchCalledTwiceOrMore = false;
@@ -155,6 +174,56 @@ public void executeWorkflow(final String objectName, final String signal, final
155174
}
156175
}
157176

177+
178+
179+
180+
/**
181+
* Test of searchObject method, of class OdooCommand.
182+
*/
183+
@Test
184+
public void testSearchObject() throws Exception {
185+
ObjectAdapter partnerAdapter = session.getObjectAdapter("res.partner");
186+
FilterCollection filters = new FilterCollection();
187+
filters.add("id", "<=", 2);
188+
RowCollection partners = partnerAdapter.searchAndReadObject(
189+
filters, new String[] { "name", "email" });
190+
191+
SoftAssertions softAssertions = new SoftAssertions();
192+
softAssertions.assertThat(partners.isEmpty()).as("Is successful").isFalse();
193+
softAssertions.assertAll();
194+
}
195+
196+
197+
@Test
198+
public void should_return_model_list() throws Exception {
199+
// use SoftAssertions instead of direct assertThat methods
200+
// to collect all failing assertions in one go
201+
SoftAssertions softly = new SoftAssertions();
202+
203+
assert(true);
204+
}
205+
206+
@Test
207+
public void test_translated_name() throws Exception {
208+
// use SoftAssertions instead of direct assertThat methods
209+
// to collect all failing assertions in one go
210+
SoftAssertions softly = new SoftAssertions();
211+
212+
String objectName = "product.product";
213+
ObjectAdapter prodAdapter = session.getObjectAdapter(objectName);
214+
String[] fields = new String[]{"name", "display_name"};
215+
Integer[] ids = new Integer [] { 32 };
216+
FilterCollection filters = new FilterCollection();
217+
RowCollection prod_ids = prodAdapter.readObject(
218+
ids,
219+
fields);
220+
Row prod_id = prod_ids.get(0);
221+
222+
Object[] readResult = (Object[]) session.executeCommand(objectName, "read", new Object[]{ids, fields});
223+
System.out.println("prod_id name " + prod_id.get("name"));
224+
assert(true);
225+
}
226+
158227
@Test
159228
public void should_throw_if_signal_doesnt_exist_for_that_object() throws Exception {
160229
// Wrong signal
@@ -191,5 +260,41 @@ public void should_call_execute_worflow_on_command() throws Exception {
191260
adapter.executeWorkflow(row, TEST_SIGNAL_NAME);
192261
assertThat(command.executeWorkflowCalled).as("Command's executeWorkflow has been called").isTrue();
193262
}
263+
264+
/**
265+
* Only used to set the static data for connection on the main class
266+
*/
267+
private static class DemoDbConnectionDataSetter implements DemoDbInfoRequester {
268+
@Override
269+
public void setProtocol(RPCProtocol protocol) {
270+
ObjectAdapterTest.protocol = protocol;
271+
}
272+
273+
@Override
274+
public void setHost(String host) {
275+
ObjectAdapterTest.host = host;
276+
}
277+
278+
@Override
279+
public void setPort(Integer port) {
280+
ObjectAdapterTest.port = port;
281+
}
282+
283+
@Override
284+
public void setDatabaseName(String databaseName) {
285+
ObjectAdapterTest.databaseName = databaseName;
286+
}
287+
288+
@Override
289+
public void setUserName(String userName) {
290+
ObjectAdapterTest.userName = userName;
291+
}
292+
293+
@Override
294+
public void setPassword(String password) {
295+
ObjectAdapterTest.password = password;
296+
}
297+
}
298+
194299

195300
}

0 commit comments

Comments
 (0)