|
|
|
|
@@ -8,8 +8,10 @@ import static de.srsoftware.tools.jdbc.Condition.like;
|
|
|
|
|
import static de.srsoftware.tools.jdbc.Query.*;
|
|
|
|
|
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
|
|
|
|
|
import static de.srsoftware.umbrella.core.Constants.*;
|
|
|
|
|
import static de.srsoftware.umbrella.core.Errors.*;
|
|
|
|
|
import static de.srsoftware.umbrella.core.ModuleRegistry.noteService;
|
|
|
|
|
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.databaseException;
|
|
|
|
|
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.notFound;
|
|
|
|
|
import static de.srsoftware.umbrella.stock.Constants.*;
|
|
|
|
|
import static java.lang.System.Logger.Level.*;
|
|
|
|
|
import static java.text.MessageFormat.format;
|
|
|
|
|
@@ -17,7 +19,6 @@ import static java.text.MessageFormat.format;
|
|
|
|
|
import de.srsoftware.tools.jdbc.Query;
|
|
|
|
|
import de.srsoftware.umbrella.core.BaseDb;
|
|
|
|
|
import de.srsoftware.umbrella.core.api.Owner;
|
|
|
|
|
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
|
|
|
|
import de.srsoftware.umbrella.core.model.*;
|
|
|
|
|
import de.srsoftware.umbrella.core.model.Location;
|
|
|
|
|
import java.sql.Connection;
|
|
|
|
|
@@ -51,12 +52,12 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
Long propertyId = null;
|
|
|
|
|
if (rs.next()) propertyId = rs.getLong(1);
|
|
|
|
|
rs.close();
|
|
|
|
|
if (propertyId == null || propertyId == 0) throw databaseException("Failed to create new property {0} in DB",name);
|
|
|
|
|
if (propertyId == null || propertyId == 0) throw databaseException(FAILED_TO_STORE_ENTITY,"property");
|
|
|
|
|
insertInto(TABLE_ITEM_PROPERTIES,ITEM_ID,PROPERTY_ID,VALUE).values(itemId,propertyId,value).execute(db).close();
|
|
|
|
|
db.setAutoCommit(true);
|
|
|
|
|
return new Property(propertyId,name,value,unit);
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException("Failed to create new property {0} in DB",name);
|
|
|
|
|
throw databaseException(FAILED_TO_STORE_ENTITY,"property").causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -66,7 +67,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
sql = format(sql,TABLE_ITEMS,DESCRIPTION);
|
|
|
|
|
db.prepareStatement(sql).execute();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException("failed to create {0} column in {1} table!",DESCRIPTION,TABLE_ITEMS);
|
|
|
|
|
throw databaseException(FAILED_TO_ADD_COLUMN,DESCRIPTION,TABLE_ITEMS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -119,7 +120,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
sql = format(sql, TABLE_ITEMS, ID, CODE, NAME, LOCATION_ID);
|
|
|
|
|
db.prepareStatement(sql).execute();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_ITEMS);
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_ITEMS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -129,7 +130,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
sql = format(sql, TABLE_ITEM_PROPERTIES, ITEM_ID, PROPERTY_ID,VALUE);
|
|
|
|
|
db.prepareStatement(sql).execute();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_ITEM_PROPERTIES);
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_ITEM_PROPERTIES).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -139,7 +140,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
sql = format(sql, TABLE_LOCATIONS, ID, LOCATION_ID, NAME, DESCRIPTION);
|
|
|
|
|
db.prepareStatement(sql).execute();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_LOCATIONS);
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_LOCATIONS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -149,7 +150,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
sql = format(sql, TABLE_PROPERTIES, ID, NAME, TYPE, UNIT);
|
|
|
|
|
db.prepareStatement(sql).execute();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_PROPERTIES);
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_PROPERTIES).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -178,7 +179,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
Query.delete().from(TABLE_LOCATIONS).where(ID,equal(location.id())).execute(db);
|
|
|
|
|
return location;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to delete \"{0}\"",location.name());
|
|
|
|
|
throw databaseException(FAILED_TO_DROP_ENTITY,location.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -186,7 +187,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
try {
|
|
|
|
|
db.prepareStatement("DROP TABLE IF EXISTS tokens").execute();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException("Failed to drop table tokens!");
|
|
|
|
|
throw databaseException(FAILED_TO_DROP_ENTITY,"table tokens").causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -210,7 +211,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
rs.close();
|
|
|
|
|
return items;
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw new UmbrellaException("Failed to load items from database");
|
|
|
|
|
throw databaseException(FAILED_TO_LIST_ENTITIES,ITEMS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -223,7 +224,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
rs.close();
|
|
|
|
|
return list;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load child locations for {0}",parentId);
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_CHILD_LOCATIONS,parentId).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -236,7 +237,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
rs.close();
|
|
|
|
|
return list;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load locations for user {0}",company.name());
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,"locations",company.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -251,7 +252,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
for (var item : list) loadProperties(item);
|
|
|
|
|
return list;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load items at {0}",location);
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,ITEMS,location).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -267,7 +268,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
for (var item : list) loadProperties(item);
|
|
|
|
|
return list;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load items of {0}",company);
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,ITEMS,company).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -279,7 +280,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
rs.close();
|
|
|
|
|
return item;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load properties of {0}",item.name());
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,PROPERTIES,item.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -302,9 +303,10 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
if (rs.next()) result = Item.of(rs);
|
|
|
|
|
rs.close();
|
|
|
|
|
if (result != null) return result;
|
|
|
|
|
} catch (SQLException ignored) {
|
|
|
|
|
throw notFound(FAILED_TO_LOAD_ENTITY,ITEM);
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITY,ITEM).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
throw databaseException("Failed to load item");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public DbLocation loadLocation(long locationId) {
|
|
|
|
|
@@ -314,9 +316,9 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
if (rs.next()) loc = DbLocation.of(rs);
|
|
|
|
|
rs.close();
|
|
|
|
|
if (loc != null) return loc;
|
|
|
|
|
throw databaseException("Failed to load location with id = {0}",locationId);
|
|
|
|
|
throw notFound(FAILED_TO_LOAD_ENTITY_BY_ID,LOCATION,locationId);
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load location with id = {0}",locationId);
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITY_BY_ID,LOCATION,locationId).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -329,7 +331,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
rs.close();
|
|
|
|
|
return list;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load properties!");
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITY,PROPERTIES).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -342,7 +344,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
rs.close();
|
|
|
|
|
return list;
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load locations for user {0}",user.name());
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,LOCATIONS,user.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -354,7 +356,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
rs.close();
|
|
|
|
|
return number +1L;
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException("Failed to read last item number for {0}",owner);
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,"last item number",owner).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -377,7 +379,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
location = parent;
|
|
|
|
|
}
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to load path to location {0}",target);
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,"path",target).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
return root;
|
|
|
|
|
}
|
|
|
|
|
@@ -408,10 +410,10 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
long id = 0;
|
|
|
|
|
if (rs.next()) id = rs.getLong(1);
|
|
|
|
|
rs.close();
|
|
|
|
|
if (id == 0) throw databaseException("Failed to save new location ({0})",location.name());
|
|
|
|
|
if (id == 0) throw databaseException(FAILED_TO_STORE_ENTITY,location.name());
|
|
|
|
|
return location.id(id);
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to save new location ({0})",location.name());
|
|
|
|
|
throw databaseException(FAILED_TO_STORE_ENTITY,location.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
try {
|
|
|
|
|
@@ -423,7 +425,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
.close();
|
|
|
|
|
return location.clear();
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Updating location \"{0}\" not implemented",location.name());
|
|
|
|
|
throw databaseException(FAILED_TO_UPDATE_ENTITY,location.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -439,7 +441,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
if (rs.next()) item.id(rs.getLong(1)).ownerNumber(number);
|
|
|
|
|
rs.close();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException("Failed to save new item to database!");
|
|
|
|
|
throw databaseException(FAILED_TO_STORE_ENTITY,item.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
} else if (item.isDirty()) {
|
|
|
|
|
try {
|
|
|
|
|
@@ -458,7 +460,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
}
|
|
|
|
|
item.clear();
|
|
|
|
|
} catch (SQLException e){
|
|
|
|
|
throw databaseException("Failed to update item {0}",item.name());
|
|
|
|
|
throw databaseException(FAILED_TO_UPDATE_ENTITY,item.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
saveProperties(item);
|
|
|
|
|
@@ -468,9 +470,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
|
|
|
|
|
private void saveProperties(Item item){
|
|
|
|
|
var saved = new ArrayList<Property>();
|
|
|
|
|
for (var property : item.properties()) {
|
|
|
|
|
saved.add(saveProperty(item, property));
|
|
|
|
|
}
|
|
|
|
|
for (var property : item.properties()) saved.add(saveProperty(item, property));
|
|
|
|
|
item.properties().clear();
|
|
|
|
|
item.properties().addAll(saved);
|
|
|
|
|
}
|
|
|
|
|
@@ -478,15 +478,12 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
private Property saveProperty(Item item, Property property) {
|
|
|
|
|
Long propId = property.id();
|
|
|
|
|
if (is0(propId)) {
|
|
|
|
|
LOG.log(DEBUG,"Saving new property {0}",property);
|
|
|
|
|
try {
|
|
|
|
|
var rs = select(ID).from(TABLE_PROPERTIES).where(NAME,equal(property.name())).where(UNIT,equal(property.unit())).exec(db);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
propId = rs.getLong(1);
|
|
|
|
|
}
|
|
|
|
|
if (rs.next()) propId = rs.getLong(1);
|
|
|
|
|
rs.close();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException("Failed to load property \"{}\"!",property.name());
|
|
|
|
|
throw databaseException(FAILED_TO_LOAD_ENTITY,property.name()).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (is0(propId)) return addNewProperty(item.id(), property.name(), property.value(), property.unit());
|
|
|
|
|
@@ -500,7 +497,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
var rs = select(ALL).from(TABLE_PROPERTIES).where(ID,equal(existingPropId)).exec(db);
|
|
|
|
|
if (rs.next()) prop = Property.of(rs);
|
|
|
|
|
rs.close();
|
|
|
|
|
if (prop == null) throw databaseException("Failed to load property {0} for item {1}",existingPropId,itemId);
|
|
|
|
|
if (prop == null) throw databaseException(FAILED_TO_LOAD_ENTITIES_OF_OWNER,"property "+existingPropId,"item "+itemId);
|
|
|
|
|
if ("".equals(value)){
|
|
|
|
|
Query.delete().from(TABLE_ITEM_PROPERTIES).where(ITEM_ID,equal(itemId)).where(PROPERTY_ID,equal(existingPropId)).execute(db);
|
|
|
|
|
} else {
|
|
|
|
|
@@ -508,7 +505,7 @@ public class SqliteDb extends BaseDb implements StockDb {
|
|
|
|
|
}
|
|
|
|
|
return prop.value(value);
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw databaseException("Failed to add new property to item {0}",itemId);
|
|
|
|
|
throw databaseException(FAILED_TO_ADD_PROPERTY_TO_ITEM,itemId).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|