Skip to content

Commit ca04a57

Browse files
committed
feat(core): native inventory compatibility
Signed-off-by: Teclib <[email protected]>
1 parent 07602bd commit ca04a57

File tree

12 files changed

+171
-6
lines changed

12 files changed

+171
-6
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ dependencies {
7272
implementation 'com.orhanobut:logger:2.2.0'
7373
implementation 'androidx.multidex:multidex:2.0.1'
7474
implementation 'androidx.preference:preference:1.1.1'
75+
implementation 'org.dom4j:dom4j:2.1.3'
7576

7677

7778
// Add the Firebase Crashlytics SDK.

app/src/main/assets/about.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
about.version=1.1.0
22
about.build=39329
3-
about.date=Thu Sep 30 09:16:01 2021
4-
about.commit=6c9db58
5-
about.commitFull=6c9db58604c4c69710b6903b1eb727edfb88b18b
3+
about.date=mer. avril 06 13:04:50 2022
4+
about.commit=
5+
about.commitFull=
66
about.github=https://github.com/glpi-project/android-inventory-agent

app/src/main/java/org/glpi/inventory/agent/core/detailserver/DetailServerModel.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,15 @@ public class DetailServerModel implements DetailServer.Model {
5656
@Override
5757
public void saveServer(ArrayList<String> modelServer, Context context) {
5858
LocalPreferences preferences = new LocalPreferences(context);
59-
if (modelServer.size() >= 4) {
59+
if (modelServer.size() >= 5) {
6060
if (!"".equals(modelServer.get(0))) {
6161
JSONObject jo = new JSONObject();
6262
try {
6363
jo.put("address", modelServer.get(0));
6464
jo.put("tag", modelServer.get(1));
6565
jo.put("login", modelServer.get(2));
6666
jo.put("pass", modelServer.get(3));
67+
jo.put("itemtype", modelServer.get(4));
6768
ArrayList<String> serverArray = preferences.loadServer();
6869
serverArray.add(modelServer.get(0));
6970
preferences.saveServer(serverArray);
@@ -84,14 +85,15 @@ public void saveServer(ArrayList<String> modelServer, Context context) {
8485
@Override
8586
public void updateServer(ArrayList<String> modelServer, String serverName, Context context) {
8687
LocalPreferences preferences = new LocalPreferences(context);
87-
if (modelServer.size() >= 4) {
88+
if (modelServer.size() >= 5) {
8889
if (!"".equals(modelServer.get(0))) {
8990
JSONObject jo = new JSONObject();
9091
try {
9192
jo.put("address", modelServer.get(0));
9293
jo.put("tag", modelServer.get(1));
9394
jo.put("login", modelServer.get(2));
9495
jo.put("pass", modelServer.get(3));
96+
jo.put("itemtype", modelServer.get(4));
9597
ArrayList<String> serverArray = preferences.loadServer();
9698
for (int i = 0; i < serverArray.size(); i++) {
9799
if (serverArray.get(i).equals(serverName)) {
@@ -124,6 +126,7 @@ public void loadServer(String serverName, Context context) {
124126
serverSchema.setTag(jo.getString("tag"));
125127
serverSchema.setLogin(jo.getString("login"));
126128
serverSchema.setPass(jo.getString("pass"));
129+
serverSchema.setItemtype(jo.getString("itemtype"));
127130
presenter.modelServer(serverSchema);
128131
} catch (JSONException e) {
129132
AgentLog.e(e.getMessage());

app/src/main/java/org/glpi/inventory/agent/core/detailserver/DetailServerPresenter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class DetailServerPresenter implements DetailServer.Presenter {
4646
private DetailServer.View view;
4747
private DetailServer.Model model;
4848

49-
public DetailServerPresenter(DetailServer.View view){
49+
public DetailServerPresenter(DetailServer.View view){
5050
this.view = view;
5151
model = new DetailServerModel(this);
5252
}

app/src/main/java/org/glpi/inventory/agent/schema/ServerSchema.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class ServerSchema {
4141
private String tag;
4242
private String login;
4343
private String pass;
44+
private String itemtype;
4445

4546
public String getAddress() {
4647
return address;
@@ -73,4 +74,12 @@ public String getPass() {
7374
public void setPass(String pass) {
7475
this.pass = pass;
7576
}
77+
78+
public String getItemtype() {
79+
return itemtype;
80+
}
81+
82+
public void setItemtype(String itemtype) {
83+
this.itemtype = itemtype;
84+
}
7685
}

app/src/main/java/org/glpi/inventory/agent/service/InventoryService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import androidx.annotation.RequiresApi;
5454
import androidx.core.app.NotificationCompat;
5555
import android.util.Log;
56+
import android.util.Xml;
5657

5758
import org.flyve.inventory.InventoryTask;
5859
import org.glpi.inventory.agent.R;
@@ -63,7 +64,11 @@
6364
import org.glpi.inventory.agent.utils.HttpInventory;
6465
import org.glpi.inventory.agent.utils.LocalPreferences;
6566
import org.glpi.inventory.agent.utils.LocalStorage;
67+
import org.glpi.inventory.agent.utils.Utils;
68+
import org.xmlpull.v1.XmlSerializer;
6669

70+
import java.io.StringReader;
71+
import java.io.StringWriter;
6772
import java.util.ArrayList;
6873
import java.util.Calendar;
6974
import java.util.Date;
@@ -259,6 +264,7 @@ private void sendInventory() {
259264
inventory.getXML(new InventoryTask.OnTaskCompleted() {
260265
@Override
261266
public void onTaskSuccess(String data) {
267+
data = Utils.addItemtypeNode(this, data, model.getItemtype());
262268
httpInventory.sendInventory(data, model, new HttpInventory.OnTaskCompleted() {
263269
@Override
264270
public void onTaskSuccess(String data) {

app/src/main/java/org/glpi/inventory/agent/ui/ActivityDetailServer.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@
4242
import android.preference.PreferenceManager;
4343
import android.util.Base64;
4444
import android.view.View;
45+
import android.widget.ArrayAdapter;
4546
import android.widget.Button;
4647
import android.widget.EditText;
48+
import android.widget.Spinner;
4749
import android.widget.Toast;
4850

4951
import androidx.appcompat.app.AppCompatActivity;
@@ -76,6 +78,7 @@ public class ActivityDetailServer extends AppCompatActivity implements DetailSer
7678
private EditText editTag;
7779
private EditText editLogin;
7880
private EditText editPassWord;
81+
private Spinner assetItemtype;
7982
private Toolbar toolbar;
8083
private String serverName;
8184
private JSONObject extra_Data = null;
@@ -144,6 +147,7 @@ public void onClick(View view) {
144147
editTag.setText(extra_Data.getString("TAG"));
145148
editLogin.setText(extra_Data.getString("LOGIN"));
146149
editPassWord.setText(extra_Data.getString("PASSWORD"));
150+
assetItemtype.setSelection(((ArrayAdapter)assetItemtype.getAdapter()).getPosition(extra_Data.getString("ASSET_ITEMTYPE")));
147151
} catch (Exception ex) {
148152
Toast.makeText(this, getApplicationContext().getResources().getString(R.string.bad_deeplink_format), Toast.LENGTH_LONG).show();
149153
AgentLog.e(getApplicationContext().getResources().getString(R.string.bad_deeplink_format));
@@ -182,6 +186,7 @@ public void onActivityResult(final int requestCode, final int resultCode, final
182186
editTag.setText(extra_Data.getString("TAG"));
183187
editLogin.setText(extra_Data.getString("LOGIN"));
184188
editPassWord.setText(extra_Data.getString("PASSWORD"));
189+
assetItemtype.setSelection(((ArrayAdapter)assetItemtype.getAdapter()).getPosition(extra_Data.getString("ASSET_ITEMTYPE")));
185190
} catch (Exception ex) {
186191
Toast.makeText(this, getApplicationContext().getResources().getString(R.string.bad_qr_code_format), Toast.LENGTH_LONG).show();
187192
AgentLog.e(getApplicationContext().getResources().getString(R.string.bad_qr_code_format));
@@ -219,6 +224,13 @@ private void instanceObject() {
219224
actionServer.setOnClickListener(this);
220225
deleteServer.setOnClickListener(this);
221226
btnScan = findViewById(R.id.btnQRScan);
227+
assetItemtype = findViewById(R.id.spinnerAssetItemtype);
228+
229+
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
230+
R.array.AssetItemtype, android.R.layout.simple_spinner_item);
231+
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
232+
assetItemtype.setAdapter(adapter);
233+
222234
}
223235

224236
@Override
@@ -230,6 +242,7 @@ public void onClick(View v) {
230242
serverInfo.add(editTag.getText().toString());
231243
serverInfo.add(editLogin.getText().toString());
232244
serverInfo.add(editPassWord.getText().toString());
245+
serverInfo.add(assetItemtype.getSelectedItem().toString());
233246
if (serverName == null) {
234247
presenter.saveServer(serverInfo, getApplicationContext());
235248
//manage automatic inventory
@@ -287,6 +300,7 @@ public void modelServer(ServerSchema model) {
287300
editTag.setText(model.getTag());
288301
editLogin.setText(model.getLogin());
289302
editPassWord.setText(model.getPass());
303+
assetItemtype.setSelection(((ArrayAdapter)assetItemtype.getAdapter()).getPosition(model.getItemtype()));
290304
btnScan.hide();
291305
}
292306

app/src/main/java/org/glpi/inventory/agent/ui/DialogListServers.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,21 @@
3939
import android.app.Dialog;
4040
import android.app.ProgressDialog;
4141
import android.content.DialogInterface;
42+
import android.util.Log;
43+
import android.util.Xml;
4244
import android.view.View;
4345
import android.view.Window;
4446
import android.widget.ArrayAdapter;
4547
import android.widget.Button;
4648
import android.widget.Spinner;
4749

50+
import org.dom4j.Attribute;
51+
import org.dom4j.Document;
52+
import org.dom4j.DocumentHelper;
53+
import org.dom4j.Element;
54+
import org.dom4j.dom.DOMElement;
55+
import org.dom4j.io.OutputFormat;
56+
import org.dom4j.io.XMLWriter;
4857
import org.flyve.inventory.InventoryTask;
4958
import org.glpi.inventory.agent.R;
5059
import org.glpi.inventory.agent.core.home.Home;
@@ -53,8 +62,11 @@
5362
import org.glpi.inventory.agent.utils.Helpers;
5463
import org.glpi.inventory.agent.utils.HttpInventory;
5564
import org.glpi.inventory.agent.utils.LocalPreferences;
65+
import org.glpi.inventory.agent.utils.Utils;
5666

5767
import java.util.ArrayList;
68+
import java.util.List;
69+
5870

5971
public class DialogListServers {
6072

@@ -134,6 +146,8 @@ private void sendInventory(final Activity activity, final Home.Presenter present
134146
inventoryTask.getXML(new InventoryTask.OnTaskCompleted() {
135147
@Override
136148
public void onTaskSuccess(String data) {
149+
150+
data = Utils.addItemtypeNode(this, data, model.getItemtype());
137151
AgentLog.d(data);
138152
httpInventory.sendInventory(data, model, new HttpInventory.OnTaskCompleted() {
139153
@Override

app/src/main/java/org/glpi/inventory/agent/utils/HttpInventory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public ServerSchema setServerModel(String serverName) {
8989
serverSchema.setTag(jo.getString("tag"));
9090
serverSchema.setLogin(jo.getString("login"));
9191
serverSchema.setPass(jo.getString("pass"));
92+
serverSchema.setItemtype(jo.getString("itemtype"));
9293
} catch (JSONException e) {
9394
AgentLog.e(e.getMessage());
9495
}

app/src/main/java/org/glpi/inventory/agent/utils/Utils.java

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,126 @@
4141
import android.content.res.Configuration;
4242
import android.content.res.Resources;
4343
import android.os.Build;
44+
import android.os.Environment;
45+
import android.util.Log;
46+
4447
import androidx.annotation.NonNull;
4548
import androidx.appcompat.app.AlertDialog;
4649

50+
import org.dom4j.Document;
51+
import org.dom4j.DocumentHelper;
52+
import org.dom4j.Element;
53+
import org.dom4j.dom.DOMElement;
54+
import org.flyve.inventory.InventoryLog;
4755
import org.json.JSONArray;
4856
import org.json.JSONObject;
4957

58+
import java.io.BufferedWriter;
59+
import java.io.File;
60+
import java.io.FileWriter;
61+
import java.io.IOException;
5062
import java.util.ArrayList;
5163
import java.util.Iterator;
64+
import java.util.List;
5265
import java.util.Locale;
5366

5467
public class Utils {
5568

69+
public static String fileNameXML = "Inventory.xml";
70+
71+
public static String addItemtypeNode(Object obj, String data, String asset_itemtype) {
72+
try {
73+
Document document = DocumentHelper.parseText(data);
74+
Element root = document.getRootElement();
75+
76+
//defined default value
77+
if(asset_itemtype.isEmpty() || asset_itemtype.equals(null)){
78+
asset_itemtype = "Computer";
79+
}
80+
DOMElement itemtype = new DOMElement("ITEMTYPE");
81+
itemtype.addCDATA(asset_itemtype);
82+
83+
List elements = root.elements();
84+
elements.add(0, itemtype);
85+
86+
data = document.asXML();
87+
Utils.storeFile(data, Utils.fileNameXML);
88+
return data;
89+
90+
} catch (Exception ex) {
91+
AgentLog.log(obj, "Can't set ITEMTYPE", Log.ERROR);
92+
AgentLog.log(obj, ex.getMessage(), Log.ERROR);
93+
return data;
94+
}
95+
}
96+
97+
/**
98+
* Logs the message in a directory
99+
* @param message the message
100+
* @param filename name of the file
101+
*/
102+
public static void storeFile(String message, String filename) {
103+
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
104+
File dir = new File(path);
105+
106+
String state = Environment.getExternalStorageState();
107+
if (Environment.MEDIA_MOUNTED.equals(state)) {
108+
109+
if(!dir.exists()) {
110+
if(dir.mkdirs()) {
111+
InventoryLog.d("create path");
112+
} else {
113+
InventoryLog.e("cannot create path");
114+
return;
115+
}
116+
}
117+
118+
File logFile = new File(path + "/" + filename);
119+
120+
if (!logFile.exists()) {
121+
try {
122+
if(logFile.createNewFile()) {
123+
InventoryLog.d("File created");
124+
} else {
125+
InventoryLog.d("Cannot create file");
126+
return;
127+
}
128+
} catch (IOException ex) {
129+
InventoryLog.e(ex.getMessage());
130+
}
131+
}
132+
133+
FileWriter fw = null;
134+
135+
try {
136+
//BufferedWriter for performance, true to set append to file flag
137+
fw = new FileWriter(logFile, false);
138+
BufferedWriter buf = new BufferedWriter(fw);
139+
140+
buf.write(message);
141+
buf.newLine();
142+
buf.flush();
143+
buf.close();
144+
fw.close();
145+
InventoryLog.d("Inventory stored");
146+
}
147+
catch (IOException ex) {
148+
InventoryLog.e(ex.getMessage());
149+
}
150+
finally {
151+
if(fw!=null) {
152+
try {
153+
fw.close();
154+
} catch(Exception ex) {
155+
InventoryLog.e(ex.getMessage());
156+
}
157+
}
158+
}
159+
} else {
160+
InventoryLog.d("External Storage is not available");
161+
}
162+
}
163+
56164
public static void showAlertDialog(String message, Context context, final OnTaskCompleted callback) {
57165
AlertDialog.Builder builder = new AlertDialog.Builder(context);
58166
builder.setMessage(message);

0 commit comments

Comments
 (0)