You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2022/01/23 12:10:47 UTC
[empire-db] branch version3 updated: EMPIREDB-366 make DBRecord serializable
This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch version3
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/version3 by this push:
new a75f00a EMPIREDB-366 make DBRecord serializable
a75f00a is described below
commit a75f00a74f07c4ef7491e794640f21abad604c8c
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Sun Jan 23 13:10:46 2022 +0100
EMPIREDB-366 make DBRecord serializable
---
.../org/apache/empire/samples/db/SampleApp.java | 2 +
.../websample/db/records/DepartmentRecord.java | 2 +-
.../jsf2/websample/db/records/EmployeeRecord.java | 2 +-
.../jsf2/websample/db/records/SampleRecord.java | 73 +++++++++++-----------
.../empire/jsf2/websample/web/SampleContext.java | 46 +++++++++++---
.../empire/jsf2/websample/web/SampleUser.java | 4 +-
.../empire/jsf2/websample/web/SampleUtils.java | 13 ----
.../websample/web/pages/EmployeeDetailPage.java | 23 +++++--
.../empire/jsf2/websample/web/pages/LoginPage.java | 16 +++++
.../jsf2/websample/web/pages/SamplePage.java | 2 +-
.../src/main/resources/lang/messages_de.properties | 18 ++++--
.../src/main/resources/lang/messages_en.properties | 15 +++--
.../src/main/webapp/pages/employeeDetailPage.xhtml | 1 +
.../src/main/webapp/pages/loginPage.xhtml | 3 +
.../org/apache/empire/jsf2/app/DBELResolver.java | 2 +-
.../org/apache/empire/jsf2/app/FacesUtils.java | 2 +
.../org/apache/empire/jsf2/app/WebApplication.java | 11 +++-
.../org/apache/empire/jsf2/app/WebDBContext.java | 32 ++++++----
.../apache/empire/jsf2/components/SelectTag.java | 12 +++-
.../empire/jsf2/controls/SelectInputControl.java | 3 +-
.../jsf2/pageelements/RecordPageElement.java | 7 +--
.../java/org/apache/empire/jsf2/pages/Page.java | 43 +++++++++++--
.../empire/jsf2/utils/TagEncodingHelper.java | 2 +-
.../main/java/org/apache/empire/db/DBColumn.java | 10 +--
.../main/java/org/apache/empire/db/DBCommand.java | 2 +-
.../main/java/org/apache/empire/db/DBDatabase.java | 4 +-
.../main/java/org/apache/empire/db/DBRecord.java | 33 +++++-----
.../main/java/org/apache/empire/db/DBRowSet.java | 8 +--
.../empire/db/exceptions/FieldValueException.java | 2 +-
29 files changed, 252 insertions(+), 141 deletions(-)
diff --git a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
index 0a66714..4a12013 100644
--- a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
+++ b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
@@ -134,9 +134,11 @@ public class SampleApp
// commit
context.commit();
+ /*
int idEmp = testTransactionCreate(idDevDep);
testTransactionUpdate(idEmp);
testTransactionDelete(idEmp);
+ */
// STEP 7: Update Records (by setting the phone Number)
System.out.println("*** Step 7: updateEmployee() ***");
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java
index 423ea27..03bff52 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java
@@ -23,7 +23,7 @@ import org.apache.empire.jsf2.websample.web.SampleContext;
public class DepartmentRecord extends SampleRecord<TDepartments>
{
- // *Deprecated* private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public DepartmentRecord(SampleContext context)
{
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java
index e4b24db..04d11fa 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java
@@ -28,7 +28,7 @@ import org.apache.empire.jsf2.websample.web.SampleContext;
public class EmployeeRecord extends SampleRecord<TEmployees>
{
- // *Deprecated* private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public EmployeeRecord(SampleContext context)
{
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java
index 88db889..508a532 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java
@@ -18,50 +18,53 @@
*/
package org.apache.empire.jsf2.websample.db.records;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+import org.apache.empire.commons.ClassUtils;
import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBRecord;
import org.apache.empire.jsf2.websample.db.SampleTable;
+public abstract class SampleRecord<T extends SampleTable> extends DBRecord
+{
+ private static final long serialVersionUID = 1L;
-public abstract class SampleRecord<T extends SampleTable> extends DBRecord {
-
- // *Deprecated* private static final long serialVersionUID = 1L;
-
- protected T T; // The table
-
- public SampleRecord(DBContext context, T table) {
- super(context, table);
- this.T = table;
- }
+ /*
+ * Store the table for convenience
+ */
+ protected final transient T T;
- /**
- * Returns the table this record is based upon.
- * @return The table this record is based upon.
- */
- public T getTable() {
- return T;
- }
-
- /*
- public void create(Connection conn)
- {
- super.create(getTable(), conn);
+ /**
+ * Custom deserialization for transient T.
+ */
+ private void readObject(ObjectInputStream strm)
+ throws IOException, ClassNotFoundException
+ { // Restore T
+ T table = super.getRowSet();
+ ClassUtils.setPrivateFieldValue(SampleRecord.class, this, "T", table);
+ // read the rest
+ strm.defaultReadObject();
}
-
- public void create()
- {
- super.create(getTable());
- }
-
- public void read(Object[] keys, Connection conn)
+
+ /**
+ * Constructor for SampleRecord
+ * @param context
+ * @param table
+ */
+ protected SampleRecord(DBContext context, T table)
{
- super.read(getTable(), keys, conn);
+ super(context, table);
+ this.T = table;
}
- public void read(Object id, Connection conn)
+ /**
+ * Returns the table this record is based upon.
+ * @return The table this record is based upon.
+ */
+ public T getTable()
{
- super.read(getTable(), id, conn);
+ return T;
}
- */
-
-}
\ No newline at end of file
+
+}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
index 34ae2b2..bb10d39 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
@@ -18,30 +18,56 @@
*/
package org.apache.empire.jsf2.websample.web;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import javax.faces.context.FacesContext;
+
+import org.apache.empire.commons.ClassUtils;
import org.apache.empire.jsf2.app.WebDBContext;
import org.apache.empire.jsf2.websample.db.SampleDB;
/**
* This is an example for a custom DBContext extension
* @author rainer
- *
*/
public class SampleContext extends WebDBContext<SampleDB>
{
- // *Deprecated* private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
- private final SampleSession session;
+ private final transient SampleSession session;
- public SampleContext(SampleApplication app, SampleSession session)
- {
- super(app, app.getDatabase());
- // the session
- this.session = session;
+ /**
+ * Custom serialization for transient fields.
+ *
+ */
+ private void writeObject(ObjectOutputStream strm) throws IOException
+ { // write the object
+ strm.defaultWriteObject();
+ }
+
+ /**
+ * Custom deserialization for transient fields.
+ */
+ private void readObject(ObjectInputStream strm)
+ throws IOException, ClassNotFoundException
+ { // Restore Session
+ FacesContext fc = FacesContext.getCurrentInstance();
+ SampleSession session = SampleUtils.getSampleSession(fc);
+ ClassUtils.setPrivateFieldValue(SampleContext.class, this, "session", session);
+ // Read the object
+ strm.defaultReadObject();
}
- public SampleApplication getApplication()
+ /**
+ * Constructs a SampleContext
+ */
+ public SampleContext(SampleDB db, SampleSession session)
{
- return (SampleApplication)app;
+ super(db);
+ // the session
+ this.session = session;
}
public SampleUser getUser()
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java
index 8247767..9c0589a 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java
@@ -59,9 +59,9 @@ public class SampleUser // *Deprecated* implements Serializable
return this.language;
}
- public void setLocale(Locale lo)
+ public void setLocale(Locale locale)
{
- this.language = lo;
+ this.language = locale;
}
}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
index 5391871..e282322 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
@@ -93,17 +93,4 @@ public class SampleUtils extends FacesUtils
FacesContext fc = getContext();
return getFilePath(fc, path, file);
}
-
- /* Messages */
-
- public static String getMessage(String messageKey)
- {
- return getMessage(getContext(), messageKey);
- }
-
- public static void addErrorMessage(String msg)
- {
- FacesContext fc = getContext();
- addErrorMessage(fc, msg);
- }
}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
index 716e714..da0e580 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
@@ -18,6 +18,9 @@
*/
package org.apache.empire.jsf2.websample.web.pages;
+import javax.faces.event.ActionEvent;
+
+import org.apache.empire.commons.ClassUtils;
import org.apache.empire.exceptions.MiscellaneousErrorException;
import org.apache.empire.jsf2.pageelements.RecordPageElement;
import org.apache.empire.jsf2.pages.PageOutcome;
@@ -101,18 +104,30 @@ public class EmployeeDetailPage extends SamplePage
public PageOutcome doSave()
{
-
getEmployeeRecord().update();
- getEmployeeRecord().getContext().getConnection();
-
- /* test transaction */
+ /* test transaction
SampleDB db = this.getDatabase();
if (getEmployeeRecord().isNull(db.T_EMPLOYEES.PHONE_NUMBER))
throw new MiscellaneousErrorException("Phone number must not be empty!");
+ */
return getParentOutcome(true);
}
+
+ public void doTestSerialization(ActionEvent ae)
+ {
+ /* test serialization */
+ EmployeeRecord before = getEmployeeRecord();
+ EmployeeRecord after = ClassUtils.testSerialization(EmployeeRecord.class, before);
+
+ addInfoMessage("!employeeDetail_testMessage");
+ addInfoMessage("Rowset is {0}", (after.getRowSet() ==before.getRowSet()) ? "Same" : "Different");
+ addInfoMessage("Context is {0}", (after.getContext()==before.getContext()) ? "Same" : "Different");
+ after.read(before.getKey());
+
+ addInfoMessage("!global_status", after.isValid() ? "!global_valid" : "!global_invalid");
+ }
public PageOutcome doDelete()
{
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java
index 78c58bf..8b7892e 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java
@@ -18,6 +18,9 @@
*/
package org.apache.empire.jsf2.websample.web.pages;
+import java.util.Locale;
+
+import org.apache.empire.commons.Options;
import org.apache.empire.jsf2.app.FacesUtils;
import org.apache.empire.jsf2.pages.PageOutcome;
import org.apache.empire.jsf2.websample.web.SampleSession;
@@ -26,6 +29,19 @@ import org.apache.empire.jsf2.websample.web.SampleUtils;
public class LoginPage extends SamplePage {
// *Deprecated* private static final long serialVersionUID = 1L;
+
+ private static final Options languageOptions;
+
+ static {
+ languageOptions = new Options();
+ languageOptions.set(Locale.US, "English");
+ languageOptions.set(Locale.GERMAN, "German");
+ }
+
+ public Options getLanguageOptions()
+ {
+ return languageOptions;
+ }
public void doLogin()
{
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java
index d4f6ce0..87805e0 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java
@@ -41,7 +41,7 @@ public class SamplePage extends Page
{
SampleApplication app = SampleUtils.getSampleApplication();
SampleSession session = SampleUtils.getSampleSession();
- this.sampleContext = new SampleContext(app, session);
+ this.sampleContext = new SampleContext(app.getDatabase(), session);
}
return this.sampleContext;
}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties
index 8d3c8da..fb93c93 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties
@@ -18,8 +18,8 @@
#fields
field.title.employees.employeeId=Mitarbeiter Nr.
field.title.employees.salutation=Anrede
-field.title.employees.firstname=Vorname
-field.title.employees.lastname=Nachname
+field.title.employees.firstName=Vorname
+field.title.employees.lastName=Nachname
field.title.employees.dateOfBirth=Geburtsdatum
field.title.employees.departmentId=Abteilung
field.title.employees.gender=Geschlecht
@@ -46,12 +46,16 @@ application_logout=Abmelden
#
global_list_result_empty=Es wurden keine Elemente mit den angegebenen Filterkriterien gefunden.
+global_status=Der Status ist {0}
+global_valid=g�ltig
+global_invalid=ung�ltig
#pages
-login_title = Anmeldung
-login_login = anmelden
-login_field_name = Benutzername
-login_field_password = Passwort
+login_title=Anmeldung
+login_login=anmelden
+login_field_name=Benutzername
+login_field_password=Passwort
+login_field_language=Sprache
login_hint=Hinweis: Geben Sie einen beliebigen Benutzernamen und Kennwort an.
employeeSearch_title = Mitarbeitersuche
@@ -78,6 +82,8 @@ employeeDetail_msg_extended = Hier k
employeeDetail_save = Speichern
employeeDetail_back = Zur�ck
employeeDetail_delete = L�schen
+employeeDetail_test = Test
+employeeDetail_testMessage = Serialization erfolgreich durchgef�hrt
## Old stuff
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties
index 62fc4ed..b8a4107 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties
@@ -45,13 +45,16 @@ application_logout = Logout
global_list_result_empty=No employee(s) found
-
+global_status=The status is {0}
+global_valid=valid
+global_invalid=invalid
#pages
-login_title = Login
-login_login = login
-login_field_name = User name
-login_field_password = Password
+login_title=Login
+login_login=login
+login_field_name=User name
+login_field_password=Password
+login_field_language=Sprache
login_hint=Hint: enter any non null username and password.
employeeSearch_title=Search employee
@@ -78,6 +81,8 @@ employeeDetail_msg_extended = Please display additional information here
employeeDetail_save = Save
employeeDetail_back = Back
employeeDetail_delete = Delete
+employeeDetail_test = Test
+employeeDetail_testMessage = Serialization successful
# Old stuff
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml
index 84498d9..8dd3d09 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml
@@ -69,6 +69,7 @@
<h:commandLink value="#{msg.employeeDetail_back}" action="#{page.doCancel}" immediate="true" />
<h:commandLink value="#{msg.employeeDetail_delete}" action="#{page.doDelete}" immediate="true" rendered="#{page.employeeRecord.exists}" />
<h:commandLink value="#{msg.employeeDetail_save}" action="#{page.doSave}" />
+ <h:commandLink value="#{msg.employeeDetail_test}" actionListener="#{page.doTestSerialization}" />
</h:panelGroup>
</h:form>
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml
index 7784c92..fcb82dc 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml
@@ -45,6 +45,9 @@
<sample:formInputRow for="password" label="#{msg.login_field_password}">
<h:inputSecret id="password" value="#{sampleUser.password}" required="true" />
</sample:formInputRow>
+ <sample:formInputRow for="password" label="#{msg.login_field_language}">
+ <e:select id="language" value="#{sampleUser.locale}" options="#{page.languageOptions}" />
+ </sample:formInputRow>
<!-- button bar -->
<sample:formButtonRow>
<h:commandLink action="#{page.doLogin}" value="#{msg.login_title}" />
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
index e16a914..50c3d64 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
@@ -113,7 +113,7 @@ public class DBELResolver extends ELResolver
else if (base==null)
{ // LookupDatabase
String name = StringUtils.toString(property);
- DBDatabase db = DBDatabase.findById(name);
+ DBDatabase db = DBDatabase.findByIdentifier(name);
if (db!=null)
context.setPropertyResolved(true);
// done
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
index 7af50c9..11aab53 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
@@ -381,6 +381,7 @@ public class FacesUtils
return getMessage(getContext(), messageKey);
}
+ /*
public static void addInfoMessage(FacesContext fc, String clientId, String msg)
{
fc.addMessage(clientId, new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));
@@ -410,6 +411,7 @@ public class FacesUtils
{
addErrorMessage(fc, null, msg);
}
+ */
/**
* indicates whether submitted values in InputControl should be cleared or preserved.
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java
index afe8f40..306cdbd 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java
@@ -73,12 +73,17 @@ public abstract class WebApplication
private static WebApplication appInstance = null;
- public static WebApplication getInstance()
+ /**
+ * Returns the one and only instance of the WebApplication (Singleton)
+ * @return the WebApplication instance
+ */
+ @SuppressWarnings("unchecked")
+ public static <T extends WebApplication> T getInstance()
{
if (appInstance==null)
log.warn("No WebApplication instance available. Please add a PostConstructApplicationEvent using WebAppStartupListener in your faces-config.xml to create the WebApplication object.");
// return instance
- return appInstance;
+ return (T)appInstance;
}
protected abstract void init(ServletContext servletContext);
@@ -90,7 +95,7 @@ public abstract class WebApplication
log.info("WebApplication {} created", getClass().getName());
// Must be a singleton
if (appInstance!=null) {
- throw new RuntimeException("An attempt was made to create second instance of WebApplication. WebApplication must be a singleton!");
+ throw new RuntimeException("An attempt was made to create second instance of WebApplication. WebApplication must be a Singleton!");
}
// set Instance
appInstance = this;
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
index 17e77e4..1ca1da6 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
@@ -1,14 +1,20 @@
package org.apache.empire.jsf2.app;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.sql.Connection;
import javax.faces.context.FacesContext;
+import org.apache.empire.commons.ClassUtils;
import org.apache.empire.db.DBCommand;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.context.DBContextBase;
import org.apache.empire.db.context.DBRollbackManager;
+import org.apache.empire.exceptions.ItemNotFoundException;
import org.apache.empire.exceptions.NotSupportedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,19 +27,19 @@ import org.slf4j.LoggerFactory;
*
* @param <DB>
*/
-public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Deprecated* implements Serializable
+public class WebDBContext<DB extends DBDatabase> extends DBContextBase implements Serializable
{
- // *Deprecated* private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
private static final Logger log = LoggerFactory.getLogger(WebDBContext.class);
- protected final WebApplication app; /* transient */
- protected final DB database; /* transient */
- protected final DBDatabaseDriver driver; /* transient */
+ protected final transient WebApplication app;
+ protected final transient DB database;
+ protected final transient DBDatabaseDriver driver;
/**
* Custom serialization for transient fields.
- *
+ */
private void writeObject(ObjectOutputStream strm) throws IOException
{ // Database
strm.writeObject((database!=null ? database.getIdentifier() : ""));
@@ -41,13 +47,16 @@ public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Depre
strm.defaultWriteObject();
}
+ /**
+ * Custom deserialization for transient fields.
+ */
private void readObject(ObjectInputStream strm)
throws IOException, ClassNotFoundException
{ // WebApplication
ClassUtils.setPrivateFieldValue(WebDBContext.class, this, "app", WebApplication.getInstance());
// Database
String dbid = String.valueOf(strm.readObject());
- DBDatabase database = DBDatabase.findById(dbid);
+ DBDatabase database = DBDatabase.findByIdentifier(dbid);
if (database==null)
throw new ItemNotFoundException(dbid);
ClassUtils.setPrivateFieldValue(WebDBContext.class, this, "database", database);
@@ -55,11 +64,10 @@ public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Depre
// read the rest
strm.defaultReadObject();
}
- */
- public WebDBContext(WebApplication app, DB db)
+ public WebDBContext(DB db)
{
- this.app = app;
+ this.app = WebApplication.getInstance();;
this.driver = db.getDriver();
this.database = db;
// check driver
@@ -109,14 +117,14 @@ public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Depre
protected Connection getConnection(boolean create)
{
FacesContext fc = FacesContext.getCurrentInstance();
- return this.app.getConnectionForRequest(fc, database, create);
+ return app.getConnectionForRequest(fc, database, create);
}
@Override
protected DBRollbackManager getRollbackManager(boolean create)
{
FacesContext fc = FacesContext.getCurrentInstance();
- return this.app.getRollbackManagerForRequest(fc, create);
+ return app.getRollbackManagerForRequest(fc, create);
}
}
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
index 95acf1f..33c8b20 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
@@ -33,6 +33,7 @@ import javax.faces.component.visit.VisitContext;
import javax.faces.context.FacesContext;
import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.commons.OptionEntry;
import org.apache.empire.commons.Options;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.Column;
@@ -289,8 +290,15 @@ public class SelectTag extends UIInput implements NamingContainer
UIInput inputComponent = getInputComponent();
Object value = (inputComponent==null ? "" : inputComponent.getValue());
- if (value == null)
- value = "";
+ if (value != null)
+ { // get the real value
+ Options options = this.getOptionList();
+ OptionEntry entry = options.getEntry(value);
+ if (entry!=null)
+ value = entry.getValue();
+ }
+ else value = "";
+
setValue(value);
}
super.updateModel(context);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
index fc4dc33..866eef7 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
@@ -267,7 +267,8 @@ public class SelectInputControl extends InputControl
}
if (ObjectUtils.compareEqual(ov, oe.getValue()))
{ // next
- si.setItemLabel(oe.getText());
+ String label = oe.getText();
+ si.setItemLabel(textResolver.resolveText(label));
oe = (ioe.hasNext() ? ioe.next() : null);
continue;
}
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
index 9b6cac9..1fb1c4a 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
@@ -18,15 +18,12 @@
*/
package org.apache.empire.jsf2.pageelements;
-import javax.faces.context.FacesContext;
-
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBRowSet;
import org.apache.empire.exceptions.EmpireException;
import org.apache.empire.exceptions.InternalException;
import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.exceptions.ObjectNotValidException;
-import org.apache.empire.jsf2.app.FacesUtils;
import org.apache.empire.jsf2.pages.Page;
import org.apache.empire.jsf2.pages.PageDefinition;
import org.apache.empire.jsf2.pages.PageElement;
@@ -211,9 +208,7 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
if (!(e instanceof EmpireException))
e = new InternalException(e);
// Set error Message
- FacesContext fc = FacesUtils.getContext();
- String msg = FacesUtils.getTextResolver(fc).getExceptionMessage(e);
- FacesUtils.addErrorMessage(fc, msg);
+ getPage().setErrorMessage(e);
return false;
}
}
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java
index 9b9e269..dd04c4d 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java
@@ -19,6 +19,7 @@
package org.apache.empire.jsf2.pages;
import java.lang.reflect.Method;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -26,6 +27,7 @@ import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.application.NavigationHandler;
+import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
@@ -278,7 +280,7 @@ public abstract class Page // *Deprecated* implements Serializable
protected void setSessionError(Throwable e)
{
// Set Session Message
- String msg = getErrorMessage(e);
+ String msg = extractErrorMessage(e);
String detail = extractErrorMessageDetail(action, e, 1);
if (log.isDebugEnabled())
log.debug(msg + "\r\n" + detail, e);
@@ -289,7 +291,7 @@ public abstract class Page // *Deprecated* implements Serializable
protected boolean handleActionError(String action, Throwable e)
{
// Set Faces Message
- String msg = getErrorMessage(e);
+ String msg = extractErrorMessage(e);
String detail = extractErrorMessageDetail(action, e, 1);
log.error(msg + "\r\n" + detail);
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, detail);
@@ -305,9 +307,40 @@ public abstract class Page // *Deprecated* implements Serializable
return true;
}
- protected void setErrorMessage(Throwable e)
+ protected void addFacesMessage(Severity severity, String msg, Object... params)
{
- String msg = getErrorMessage(e);
+ TextResolver resolver = getTextResolver();
+ msg = resolver.resolveText(msg);
+ if (params.length>0)
+ { // translate params
+ for (int i=0; i<params.length; i++)
+ if (params[i] instanceof String)
+ params[i] = resolver.resolveText((String)params[i]);
+ // format
+ msg = MessageFormat.format(msg, params);
+ }
+ FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_WARN, msg, msg);
+ FacesContext.getCurrentInstance().addMessage(getPageName(), facesMsg);
+ }
+
+ public final void addInfoMessage(String msg, Object... params)
+ {
+ addFacesMessage(FacesMessage.SEVERITY_INFO, msg, params);
+ }
+
+ public final void addWarnMessage(String msg, Object... params)
+ {
+ addFacesMessage(FacesMessage.SEVERITY_WARN, msg, params);
+ }
+
+ public final void addErrorMessage(String msg, Object... params)
+ {
+ addFacesMessage(FacesMessage.SEVERITY_ERROR, msg, params);
+ }
+
+ public void setErrorMessage(Throwable e)
+ {
+ String msg = extractErrorMessage(e);
String detail = extractErrorMessageDetail(action, e, 1);
if (log.isDebugEnabled())
log.debug(msg + "\r\n" + detail, e);
@@ -315,7 +348,7 @@ public abstract class Page // *Deprecated* implements Serializable
FacesContext.getCurrentInstance().addMessage(getPageName(), facesMsg);
}
- protected String getErrorMessage(Throwable e)
+ protected String extractErrorMessage(Throwable e)
{ // Wrap Exception
if (!(e instanceof EmpireException))
e = new InternalException(e);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 1fdd4d1..8c8f01c 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -973,7 +973,7 @@ public class TagEncodingHelper implements NamingContainer
log.error("Invalid column expression '{}'!", name);
return null; // not found
}
- DBDatabase db = DBDatabase.findById(name.substring(0,dbix));
+ DBDatabase db = DBDatabase.findByIdentifier(name.substring(0,dbix));
if (db==null)
{
log.error("Database '{}' not found!", name.substring(0,dbix));
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
index 7cb508a..0cdc163 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
@@ -84,23 +84,23 @@ public abstract class DBColumn extends DBColumnExpr
* Gets an identifier for this RowSet Object
* @return the rowset identifier
*/
- public String getIdent()
+ public String getIdentifier()
{
- return rowset.getIdent()+"."+name;
+ return rowset.getIdentifier()+"."+name;
}
/**
* returns a rowset by its identifier
* @param columnId the id of the column
* @return the DBColumn object
- public static DBColumn findById(String columnId)
+ public static DBColumn findByIdentifier(String columnId)
{
int i = columnId.lastIndexOf('.');
if (i<0)
throw new InvalidArgumentException("columnId", columnId);
// rowset suchen
String rsid = columnId.substring(0, i);
- DBRowSet rset = DBRowSet.findById(rsid);
+ DBRowSet rset = DBRowSet.findByIdentifier(rsid);
// column suchen
String colname = columnId.substring(i+1);
DBColumn col = rset.getColumn(colname);
@@ -126,7 +126,7 @@ public abstract class DBColumn extends DBColumnExpr
String dbid = String.valueOf(strm.readObject());
String rsid = String.valueOf(strm.readObject());
// find database
- DBDatabase dbo = DBDatabase.findById(dbid);
+ DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
if (dbo==null)
throw new ClassNotFoundException(dbid);
// find rowset
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
index 2a242aa..75ec274 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
@@ -97,7 +97,7 @@ public abstract class DBCommand extends DBCommandExpr
{
String dbid = String.valueOf(strm.readObject());
// find database
- DBDatabase dbo = DBDatabase.findById(dbid);
+ DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
if (dbo==null)
throw new ItemNotFoundException(dbid);
// set final field
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
index aa29465..63fa6a4 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
@@ -103,7 +103,7 @@ public abstract class DBDatabase extends DBObject
/**
* find a database by id
*/
- public static DBDatabase findById(String dbIdent)
+ public static DBDatabase findByIdentifier(String dbIdent)
{
WeakReference<DBDatabase> ref = databaseMap.get(dbIdent);
if (ref==null)
@@ -229,7 +229,7 @@ public abstract class DBDatabase extends DBObject
}
invalidKeys.clear();
// Find a unique key
- if (findById(dbid)!=null)
+ if (findByIdentifier(dbid)!=null)
{ int maxInstId=1;
String instPrefix = dbid+":";
for (String key : databaseMap.keySet())
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index aeaf459..c318106 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -18,6 +18,10 @@
*/
package org.apache.empire.db;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.util.Collection;
@@ -25,6 +29,7 @@ import java.util.List;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.beanutils.PropertyUtilsBean;
+import org.apache.empire.commons.ClassUtils;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.commons.Options;
import org.apache.empire.commons.StringUtils;
@@ -38,6 +43,7 @@ import org.apache.empire.db.exceptions.FieldValueNotFetchedException;
import org.apache.empire.db.expr.compare.DBCompareExpr;
import org.apache.empire.exceptions.BeanPropertyGetException;
import org.apache.empire.exceptions.InvalidArgumentException;
+import org.apache.empire.exceptions.ItemNotFoundException;
import org.apache.empire.exceptions.NotSupportedException;
import org.apache.empire.exceptions.ObjectNotValidException;
import org.apache.empire.xml.XMLUtil;
@@ -52,9 +58,9 @@ import org.w3c.dom.Element;
* This class handles one record from a database table.
*
*/
-public class DBRecord extends DBRecordData implements DBContextAware, Record, Cloneable
+public class DBRecord extends DBRecordData implements DBContextAware, Record, Cloneable, Serializable
{
- // *Deprecated* private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
private static final Logger log = LoggerFactory.getLogger(DBRecord.class);
@@ -203,7 +209,7 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
// the context
protected final DBContext context;
- protected final DBRowSet rowset; /* transient */
+ protected final transient DBRowSet rowset; /* transient for serialization */
// This is the record data
private State state;
@@ -219,6 +225,7 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
/**
* Custom serialization for transient rowset.
*
+ */
private void writeObject(ObjectOutputStream strm) throws IOException
{ // RowSet
String dbid = rowset.getDatabase().getIdentifier();
@@ -229,12 +236,15 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
strm.defaultWriteObject();
}
+ /**
+ * Custom deserialization for transient rowset.
+ */
private void readObject(ObjectInputStream strm) throws IOException, ClassNotFoundException
{
String dbid = String.valueOf(strm.readObject());
String rsid = String.valueOf(strm.readObject());
// find database
- DBDatabase dbo = DBDatabase.findById(dbid);
+ DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
if (dbo==null)
throw new ItemNotFoundException(dbid);
// find rowset
@@ -247,8 +257,6 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
strm.defaultReadObject();
}
- */
-
/**
* Constructs a new DBRecord.<BR>
* @param context the DBContext for this record
@@ -838,19 +846,6 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
public void init(Object[] key, boolean insert)
{ // Init with keys
rowset.initRecord(this, key, insert);
- // fill default values
- for (int i = 0; i < fields.length; i++)
- { // already set ?
- if (fields[i]!=null)
- continue;
- // check default
- DBTableColumn col = (DBTableColumn) rowset.getColumn(i);
- Object value = col.getRecordDefaultValue(null);
- if (value==null)
- continue;
- // Modify value
- modifyValue(i, value, true);
- }
}
/**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
index cc9d77b..ec8b6ad 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
@@ -126,7 +126,7 @@ public abstract class DBRowSet extends DBExpr
* Gets an identifier for this RowSet Object
* @return the rowset identifier
*/
- public String getIdent()
+ public String getIdentifier()
{
return db.getIdentifier()+"."+getName();
}
@@ -136,14 +136,14 @@ public abstract class DBRowSet extends DBExpr
* @param rowsetId the id of the rowset
* @return the rowset object
*
- public static DBRowSet findById(String rowsetId)
+ public static DBRowSet findByIdentifier(String rowsetId)
{
int i = rowsetId.lastIndexOf('.');
if (i<0)
throw new InvalidArgumentException("rowsetId", rowsetId);
// database suchen
String dbid = rowsetId.substring(0, i);
- DBDatabase db = DBDatabase.findById(dbid);
+ DBDatabase db = DBDatabase.findByIdentifier(dbid);
if (db==null)
throw new ItemNotFoundException(dbid);
// rowset suchen
@@ -169,7 +169,7 @@ public abstract class DBRowSet extends DBExpr
{ // Database
String dbid = String.valueOf(strm.readObject());
// find database
- DBDatabase dbo = DBDatabase.findById(dbid);
+ DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
if (dbo==null)
throw new ItemNotFoundException(dbid);
// set final field
diff --git a/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java b/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java
index c74f107..bade28a 100644
--- a/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java
+++ b/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java
@@ -32,7 +32,7 @@ public abstract class FieldValueException extends EmpireException
{
String title = column.getTitle();
if (StringUtils.isEmpty(title))
- title = "!["+((column instanceof DBColumn) ? ((DBColumn)column).getIdent() : column.getName()) + "]";
+ title = "!["+((column instanceof DBColumn) ? ((DBColumn)column).getIdentifier() : column.getName()) + "]";
return title;
}