• R/O
  • SSH
  • HTTPS

phosphoresce: Commit


Commit MetaInfo

Revision398 (tree)
Time2013-08-18 23:19:46
Authorbbcry

Log Message

(empty log message)

Change Summary

Incremental Difference

--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/model/SUser.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/model/SUser.java (revision 398)
@@ -2,11 +2,16 @@
22
33 import javax.persistence.Column;
44 import javax.persistence.Entity;
5+import javax.persistence.JoinColumn;
6+import javax.persistence.ManyToOne;
57 import javax.persistence.Table;
68 import javax.persistence.UniqueConstraint;
79
10+import org.hibernate.annotations.JoinColumnOrFormula;
11+import org.hibernate.annotations.JoinColumnsOrFormulas;
12+import org.hibernate.annotations.JoinFormula;
813 import org.phosphoresce.webcore.core.transaction.TransactionUser;
9-import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateEntity;
14+import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDefaultEntity;
1015
1116 /**
1217 * システムユーザーテーブルのエンティティインタフェースを提供します。<br>
@@ -29,7 +34,7 @@
2934 uniqueConstraints = { //
3035 @UniqueConstraint(columnNames = { "delete_date", "code" }) //
3136 })
32-public class SUser extends AbstractHibernateEntity implements TransactionUser {
37+public class SUser extends AbstractHibernateDefaultEntity implements TransactionUser {
3338
3439 /** ユーザーコード */
3540 @Column(name = "code", nullable = false, length = 32)
@@ -47,6 +52,15 @@
4752 @Column(name = "last_name", nullable = false, length = 32)
4853 private String lastName;
4954
55+ /** ユーザー権限 */
56+ @ManyToOne
57+ //@JoinFormula(referencedColumnName = "code", value = "(select s_code.code from s_code where s_code.category = 'S0002' and s_code.code = role_type)")
58+ @JoinColumnsOrFormulas({ //
59+ @JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "category", value = "'S0002'")), //
60+ @JoinColumnOrFormula(column = @JoinColumn(referencedColumnName = "code", name = "role_type", nullable = false)) //
61+ })
62+ private SCode roleType;
63+
5064 /**
5165 * データベース登録処理前のエンティティ内容の整合処理を実施します。<br>
5266 * 当処理はエンティティ毎に処理が異なります。<br>
@@ -119,4 +133,20 @@
119133 public final void setLastName(String lastName) {
120134 this.lastName = lastName;
121135 }
136+
137+ /**
138+ * ユーザー権限を取得します。<br>
139+ * @return ユーザー権限
140+ */
141+ public SCode getRoleType() {
142+ return roleType;
143+ }
144+
145+ /**
146+ * ユーザー権限を設定します。<br>
147+ * @param roleType ユーザー権限
148+ */
149+ public void setRoleType(SCode roleType) {
150+ this.roleType = roleType;
151+ }
122152 }
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/model/SConfig.java (nonexistent)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/model/SConfig.java (revision 398)
@@ -0,0 +1,159 @@
1+package org.phosphoresce.webcore.ext.hibernate4.model;
2+
3+import javax.persistence.Column;
4+import javax.persistence.Entity;
5+import javax.persistence.Table;
6+import javax.persistence.UniqueConstraint;
7+
8+import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateEntity;
9+
10+/**
11+ * システム環境設定テーブルのエンティティインタフェースを提供します。<br>
12+ * <p>
13+ * システム内部で管理される各種設定情報が保存されるテーブルエンティティです。<br>
14+ * アプリケーション側で業務的に直接利用されることは想定されません。<br>
15+ * </p>
16+ *
17+ * @author Kitagawa<br>
18+ *
19+ *<!--
20+ * 更新日 更新者 更新内容
21+ * 2013/02/01 Kitagawa 新規作成
22+ *-->
23+ */
24+@Entity
25+@Table(name = "s_config", //
26+uniqueConstraints = { //
27+@UniqueConstraint(columnNames = { "property" }) //
28+})
29+public class SConfig extends AbstractHibernateEntity {
30+
31+ /** プロパティキー */
32+ @Column(name = "property", nullable = false, length = 32)
33+ private String property;
34+
35+ /** 設定値1 */
36+ @Column(name = "value_1", length = 50)
37+ private String value1;
38+
39+ /** 設定値2 */
40+ @Column(name = "value_2", length = 50)
41+ private String value2;
42+
43+ /** 設定値3 */
44+ @Column(name = "value_3", length = 50)
45+ private String value3;
46+
47+ /** 設定値4 */
48+ @Column(name = "value_4", length = 50)
49+ private String value4;
50+
51+ /** 設定値5 */
52+ @Column(name = "value_5", length = 50)
53+ private String value5;
54+
55+ /**
56+ * データベース登録処理前のエンティティ内容の整合処理を実施します。<br>
57+ * 当処理はエンティティ毎に処理が異なります。<br>
58+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateEntity#validateEntity()
59+ */
60+ @Override
61+ protected void validateEntity() {
62+ }
63+
64+ /**
65+ * プロパティキーを取得します。<br>
66+ * @return プロパティキー
67+ */
68+ public String getProperty() {
69+ return property;
70+ }
71+
72+ /**
73+ * プロパティキーを設定します。<br>
74+ * @param property プロパティキー
75+ */
76+ public void setProperty(String property) {
77+ this.property = property;
78+ }
79+
80+ /**
81+ * 設定値1を取得します。<br>
82+ * @return 設定値1
83+ */
84+ public String getValue1() {
85+ return value1;
86+ }
87+
88+ /**
89+ * 設定値1を設定します。<br>
90+ * @param value1 設定値1
91+ */
92+ public void setValue1(String value1) {
93+ this.value1 = value1;
94+ }
95+
96+ /**
97+ * 設定値2を取得します。<br>
98+ * @return 設定値2
99+ */
100+ public String getValue2() {
101+ return value2;
102+ }
103+
104+ /**
105+ * 設定値2を設定します。<br>
106+ * @param value2 設定値2
107+ */
108+ public void setValue2(String value2) {
109+ this.value2 = value2;
110+ }
111+
112+ /**
113+ * 設定値3を取得します。<br>
114+ * @return 設定値3
115+ */
116+ public String getValue3() {
117+ return value3;
118+ }
119+
120+ /**
121+ * 設定値3を設定します。<br>
122+ * @param value3 設定値3
123+ */
124+ public void setValue3(String value3) {
125+ this.value3 = value3;
126+ }
127+
128+ /**
129+ * 設定値4を取得します。<br>
130+ * @return 設定値4
131+ */
132+ public String getValue4() {
133+ return value4;
134+ }
135+
136+ /**
137+ * 設定値4を設定します。<br>
138+ * @param value4 設定値4
139+ */
140+ public void setValue4(String value4) {
141+ this.value4 = value4;
142+ }
143+
144+ /**
145+ * 設定値5を取得します。<br>
146+ * @return 設定値5
147+ */
148+ public String getValue5() {
149+ return value5;
150+ }
151+
152+ /**
153+ * 設定値5を設定します。<br>
154+ * @param value5 設定値5
155+ */
156+ public void setValue5(String value5) {
157+ this.value5 = value5;
158+ }
159+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/model/SCode.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/model/SCode.java (revision 398)
@@ -5,7 +5,7 @@
55 import javax.persistence.Table;
66 import javax.persistence.UniqueConstraint;
77
8-import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateExpirableEntity;
8+import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateEntity;
99
1010 /**
1111 * システムコードマスタテーブルのエンティティインタフェースを提供します。<br>
@@ -24,9 +24,9 @@
2424 @Entity
2525 @Table(name = "s_code", //
2626 uniqueConstraints = { //
27-@UniqueConstraint(columnNames = { "delete_date", "expiry_start", "expiry_end", "category", "code" }) //
27+@UniqueConstraint(columnNames = { "category", "code" }) //
2828 })
29-public class SCode extends AbstractHibernateExpirableEntity {
29+public class SCode extends AbstractHibernateEntity {
3030
3131 /** カテゴリ */
3232 @Column(name = "category", nullable = false, length = 5)
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/service/SystemMasterService.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/service/SystemMasterService.java (revision 398)
@@ -5,8 +5,10 @@
55
66 import org.hibernate.criterion.Order;
77 import org.phosphoresce.webcore.ext.hibernate4.dao.SCodeDAO;
8+import org.phosphoresce.webcore.ext.hibernate4.dao.SConfigDAO;
89 import org.phosphoresce.webcore.ext.hibernate4.dao.SUserDAO;
910 import org.phosphoresce.webcore.ext.hibernate4.model.SCode;
11+import org.phosphoresce.webcore.ext.hibernate4.model.SConfig;
1012 import org.phosphoresce.webcore.ext.hibernate4.model.SUser;
1113 import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateService;
1214 import org.phosphoresce.webcore.ext.hibernate4.transaction.HibernateTransactionContext;
@@ -27,6 +29,9 @@
2729 */
2830 public class SystemMasterService extends AbstractHibernateService<SUser> {
2931
32+ /** システム環境設定マスタテーブルアクセスオブジェクト */
33+ private SConfigDAO sConfigDAO;
34+
3035 /** システムコードマスタテーブルアクセスオブジェクト */
3136 private SCodeDAO sCodeDAO;
3237
@@ -39,18 +44,60 @@
3944 */
4045 public SystemMasterService(HibernateTransactionContext<SUser> transactionContext) {
4146 super(transactionContext);
47+ sConfigDAO = createDAO(SConfigDAO.class);
4248 sCodeDAO = createDAO(SCodeDAO.class);
4349 sUserDAO = createDAO(SUserDAO.class);
4450 }
4551
4652 /**
47- * システムに登録されている全てのシステムマスタを取得します。<br>
48- * @return 全てのシステムマスタレコードリスト
53+ * システムに登録されている全てのシステム環境設定マスタを取得します。<br>
54+ * @return 全てのシステム環境設定マスタエンティティリスト
4955 */
50- public List<SCode> searchAllSCode() {
56+ public List<SConfig> getAllSConfig() {
5157 List<Order> orders = new LinkedList<Order>();
58+ orders.add(Order.asc("property"));
59+ return sConfigDAO.findAll(orders);
60+ }
61+
62+ /**
63+ * 指定されたプロパティのシステム環境設定マスタを取得します。<br>
64+ * @return システム環境設定マスタエンティティ
65+ */
66+ public SConfig getSConfigByProperty(String property) {
67+ return sConfigDAO.findByProperty(property);
68+ }
69+
70+ /**
71+ * 指定されたシステム環境設定マスタを登録します。<br>
72+ * @param sCode システム環境設定マスタエンティティ
73+ */
74+ public void registSConfig(SConfig sConfig) {
75+ save(sConfig);
76+ }
77+
78+ /**
79+ * システムに登録されている全てのシステムコードマスタを取得します。<br>
80+ * @return 全てのシステムコードマスタエンティティリスト
81+ */
82+ public List<SCode> getAllSCode() {
83+ List<Order> orders = new LinkedList<Order>();
5284 orders.add(Order.asc("category"));
5385 orders.add(Order.asc("orderNo"));
5486 return sCodeDAO.findAll(orders);
5587 }
88+
89+ /**
90+ * 指定されたシステムコードマスタを登録します。<br>
91+ * @param sCode システムコードマスタエンティティ
92+ */
93+ public void registSCode(SCode sCode) {
94+ save(sCode);
95+ }
96+
97+ /**
98+ * 全てのシステムコードマスタを物理削除します。<br>
99+ */
100+ public void removeAllSCode() {
101+ sCodeDAO.removeAll();
102+ }
56103 }
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/dao/SCodeDAO.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/dao/SCodeDAO.java (revision 398)
@@ -2,9 +2,10 @@
22
33 import static org.hibernate.criterion.Restrictions.*;
44
5+import org.hibernate.SQLQuery;
56 import org.phosphoresce.webcore.ext.hibernate4.annotation.HibernateDAO;
67 import org.phosphoresce.webcore.ext.hibernate4.model.SCode;
7-import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO;
8+import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractGenericHibernateDAO;
89 import org.phosphoresce.webcore.ext.hibernate4.transaction.GenericCriteria;
910 import org.phosphoresce.webcore.ext.hibernate4.transaction.HibernateTransactionManager;
1011
@@ -23,7 +24,7 @@
2324 *-->
2425 */
2526 @HibernateDAO(entity = SCode.class)
26-public class SCodeDAO extends AbstractHibernateDAO<SCode> {
27+public class SCodeDAO extends AbstractGenericHibernateDAO<SCode> {
2728
2829 /**
2930 * コンストラクタ<br>
@@ -40,9 +41,17 @@
4041 * @return システムコードマスタエンティティ
4142 */
4243 public SCode findByCategoryAndCode(String category, String code) {
43- GenericCriteria<SCode> criteria = createCriteriaExcludeDeleted();
44+ GenericCriteria<SCode> criteria = createCriteria();
4445 criteria.add(eq("category", category));
4546 criteria.add(eq("code", code));
4647 return criteria.uniqueResult();
4748 }
49+
50+ /**
51+ * 全てのシステムコードマスタを物理削除します。<br>
52+ */
53+ public void removeAll() {
54+ SQLQuery query = createSQLQuery("delete from s_code");
55+ query.executeUpdate();
56+ }
4857 }
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/dao/SUserDAO.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/dao/SUserDAO.java (revision 398)
@@ -4,7 +4,7 @@
44
55 import org.phosphoresce.webcore.ext.hibernate4.annotation.HibernateDAO;
66 import org.phosphoresce.webcore.ext.hibernate4.model.SUser;
7-import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO;
7+import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractGenericHibernateDAO;
88 import org.phosphoresce.webcore.ext.hibernate4.transaction.GenericCriteria;
99 import org.phosphoresce.webcore.ext.hibernate4.transaction.HibernateTransactionManager;
1010
@@ -23,7 +23,7 @@
2323 *-->
2424 */
2525 @HibernateDAO(entity = SUser.class)
26-public class SUserDAO extends AbstractHibernateDAO<SUser> {
26+public class SUserDAO extends AbstractGenericHibernateDAO<SUser> {
2727
2828 /**
2929 * コンストラクタ<br>
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/dao/SConfigDAO.java (nonexistent)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/dao/SConfigDAO.java (revision 398)
@@ -0,0 +1,48 @@
1+package org.phosphoresce.webcore.ext.hibernate4.dao;
2+
3+import static org.hibernate.criterion.Restrictions.*;
4+
5+import org.phosphoresce.webcore.ext.hibernate4.annotation.HibernateDAO;
6+import org.phosphoresce.webcore.ext.hibernate4.model.SConfig;
7+import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractGenericHibernateDAO;
8+import org.phosphoresce.webcore.ext.hibernate4.transaction.GenericCriteria;
9+import org.phosphoresce.webcore.ext.hibernate4.transaction.HibernateTransactionManager;
10+
11+/**
12+ * システム環境設定テーブルのエンティティへのアクセスインタフェースを提供します。<br>
13+ * <p>
14+ * テーブルエンティティに対する汎用的なアクセスインタフェースが提供されます。<br>
15+ * 業務処理依存するアクセスインタフェースは提供されません。<br>
16+ * </p>
17+ *
18+ * @author Kitagawa<br>
19+ *
20+ *<!--
21+ * 更新日 更新者 更新内容
22+ * 2013/02/01 Kitagawa 新規作成
23+ *-->
24+ */
25+@HibernateDAO(entity = SConfig.class)
26+public class SConfigDAO extends AbstractGenericHibernateDAO<SConfig> {
27+
28+ /**
29+ * コンストラクタ<br>
30+ * @param transaction トランザクション管理オブジェクト
31+ */
32+ public SConfigDAO(HibernateTransactionManager transaction) {
33+ super(transaction);
34+ }
35+
36+ /**
37+ * 指定されたユーザーコードで検索を行います。<br>
38+ * @param code ユーザーコード
39+ * @return エンティティオブジェクト
40+ */
41+ public SConfig findByProperty(String property) {
42+ GenericCriteria<SConfig> criteria = createCriteria();
43+
44+ criteria.add(eq("property", property));
45+
46+ return criteria.uniqueResult();
47+ }
48+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/GenericCriteria.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/GenericCriteria.java (revision 398)
@@ -10,7 +10,6 @@
1010 import org.hibernate.LockMode;
1111 import org.hibernate.ScrollMode;
1212 import org.hibernate.ScrollableResults;
13-import org.hibernate.Session;
1413 import org.hibernate.criterion.Criterion;
1514 import org.hibernate.criterion.Order;
1615 import org.hibernate.criterion.Projection;
@@ -63,7 +62,8 @@
6362 * @return レコード件数
6463 */
6564 public long count() {
66- long count = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();;
65+ long count = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
66+ ;
6767 criteria.setProjection(null);
6868 return count;
6969 }
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateEntity.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateEntity.java (revision 398)
@@ -1,27 +1,21 @@
11 package org.phosphoresce.webcore.ext.hibernate4.transaction;
22
33 import java.io.Serializable;
4-import java.util.Date;
54
65 import javax.persistence.Column;
76 import javax.persistence.GeneratedValue;
87 import javax.persistence.GenerationType;
98 import javax.persistence.Id;
10-import javax.persistence.JoinColumn;
11-import javax.persistence.ManyToOne;
129 import javax.persistence.MappedSuperclass;
1310 import javax.persistence.Version;
1411
15-import org.hibernate.annotations.Where;
16-import org.phosphoresce.webcore.ext.hibernate4.model.SCode;
17-import org.phosphoresce.webcore.ext.hibernate4.model.SUser;
18-
1912 /**
20- * データベーステーブルエンティティの共通カラムフィールドインタフェースを提供します。<br>
13+ * Hibernateエンティティ共通カラムフィールドインタフェースを提供します。<br>
2114 * <p>
2215 * Hibernateアドオンモジュールで利用するエンティティはすべてこのクラスが継承されて提供されます。<br>
23- * これはすべてのエンティティはレコードID、レコードバージョン番号及び、登録日時、登録者情報が必ず管理されることを意味します。<br>
24- * また、これらのアクセッサインタフェースはユーザーからの利用ではGetterインタフェースのみ提供され、Setterインタフェースはアドオンモジュール側で制御するのみに制限されます。<br>
16+ * ここではHibernateを利用したデータベーステーブル操作時に最低限必要となるレコードID、レコードバージョン番号カラムのみが提供されます。<br>
17+ * 通常のアプリケーションで利用されるエンティティはこれを直接継承せず{@link AbstractHibernateDefaultEntity}を継承して作成されます。<br>
18+ * 例外的に当エンティティが継承されて作成されるエンティティは予めアドオンが提供する{@link org.phosphoresce.webcore.ext.hibernate4.model.SCode}、{@link org.phosphoresce.webcore.ext.hibernate4.model.SConfig}となります。<br>
2519 * </p>
2620 *
2721 * @author Kitagawa<br>
@@ -45,42 +39,6 @@
4539 @Column(name = "version_lock", nullable = false)
4640 private Integer versionLocked;
4741
48- /** 登録日時 */
49- @Column(name = "entry_date")
50- private Date entryDate;
51-
52- /** 登録ユーザ */
53- @ManyToOne
54- @JoinColumn(name = "entry_user", referencedColumnName = "code")
55- @Where(clause = "delete_type = '0'")
56- private SUser entryUser;
57-
58- /** 更新日時 */
59- @Column(name = "modify_date")
60- private Date modifyDate;
61-
62- /** 更新ユーザ */
63- @ManyToOne
64- @JoinColumn(name = "modify_user", referencedColumnName = "code")
65- @Where(clause = "delete_type = '0'")
66- private SUser modifyUser;
67-
68- /** 削除日時 */
69- @Column(name = "delete_date")
70- private Date deleteDate;
71-
72- /** 削除ユーザ */
73- @ManyToOne
74- @JoinColumn(name = "delete_user", referencedColumnName = "code")
75- @Where(clause = "delete_type = '0'")
76- private SUser deleteUser;
77-
78- /** 削除状態 */
79- @ManyToOne
80- @JoinColumn(name = "delete_type", referencedColumnName = "code", nullable = false)
81- @Where(clause = "category = 'S0001' and delete_type = '0'")
82- private SCode deleteType;
83-
8442 /**
8543 * データベース登録処理前のエンティティ内容の整合処理を実施します。<br>
8644 */
@@ -125,116 +83,4 @@
12583 final void setVersionLocked(Integer versionLocked) {
12684 this.versionLocked = versionLocked;
12785 }
128-
129- /**
130- * 登録日時を取得します。<br>
131- * @return 登録日時
132- */
133- public final Date getEntryDate() {
134- return entryDate;
135- }
136-
137- /**
138- * 登録日時を設定します。<br>
139- * @param entryDate 登録日時
140- */
141- final void setEntryDate(Date entryDate) {
142- this.entryDate = entryDate;
143- }
144-
145- /**
146- * 登録ユーザを取得します。<br>
147- * @return 登録ユーザ
148- */
149- public SUser getEntryUser() {
150- return entryUser;
151- }
152-
153- /**
154- * 登録ユーザを設定します。<br>
155- * @param entryUser 登録ユーザ
156- */
157- void setEntryUser(SUser entryUser) {
158- this.entryUser = entryUser;
159- }
160-
161- /**
162- * 更新日時を取得します。<br>
163- * @return 更新日時
164- */
165- public final Date getModifyDate() {
166- return modifyDate;
167- }
168-
169- /**
170- * 更新日時を設定します。<br>
171- * @param modifyDate 更新日時
172- */
173- final void setModifyDate(Date modifyDate) {
174- this.modifyDate = modifyDate;
175- }
176-
177- /**
178- * 更新ユーザを取得します。<br>
179- * @return 更新ユーザ
180- */
181- public SUser getModifyUser() {
182- return modifyUser;
183- }
184-
185- /**
186- * 更新ユーザを設定します。<br>
187- * @param modifyUser 更新ユーザ
188- */
189- void setModifyUser(SUser modifyUser) {
190- this.modifyUser = modifyUser;
191- }
192-
193- /**
194- * 削除日時を取得します。<br>
195- * @return 削除日時
196- */
197- public final Date getDeleteDate() {
198- return deleteDate;
199- }
200-
201- /**
202- * 削除日時を設定します。<br>
203- * @param deleteDate 削除日時
204- */
205- final void setDeleteDate(Date deleteDate) {
206- this.deleteDate = deleteDate;
207- }
208-
209- /**
210- * 削除ユーザを取得します。<br>
211- * @return 削除ユーザ
212- */
213- public SUser getDeleteUser() {
214- return deleteUser;
215- }
216-
217- /**
218- * 削除ユーザを設定します。<br>
219- * @param deleteUser 削除ユーザ
220- */
221- public void setDeleteUser(SUser deleteUser) {
222- this.deleteUser = deleteUser;
223- }
224-
225- /**
226- * 削除状態を取得します。<br>
227- * @return 削除状態
228- */
229- public SCode getDeleteType() {
230- return deleteType;
231- }
232-
233- /**
234- * 削除状態を設定します。<br>
235- * @param deleteType 削除状態
236- */
237- public void setDeleteType(SCode deleteType) {
238- this.deleteType = deleteType;
239- }
24086 }
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/GeneralHibernateDAO.java (nonexistent)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/GeneralHibernateDAO.java (revision 398)
@@ -0,0 +1,176 @@
1+package org.phosphoresce.webcore.ext.hibernate4.transaction;
2+
3+import java.util.List;
4+
5+import org.hibernate.Query;
6+import org.hibernate.SQLQuery;
7+import org.hibernate.criterion.Order;
8+
9+/**
10+ * エンティティに依存しない汎用的なデータベースアクセスを行う為のインタフェースを提供します。<br>
11+ * <p>
12+ * アプリケーション規模に応じた方式設計で、ロジッククラス、サービスクラス、DAOクラスの階層とした場合に不要にクラスリソースが増加する可能性があります。<br>
13+ * その場合、当クラスをアプリケーションごとの共通サービスクラスにおいてデータベースアクセスのラッパークラスインスタンスとして提供することで、
14+ * サービスクラスから汎用的なDAOクラスのインタフェースを利用することが可能となります。<br>
15+ * </p>
16+ * <p>
17+ * 大規模なアプリケーションの場合、サービスクラスでは、DAOクラスが提供する粒度の細かい業務処理依存のない処理インタフェースはの集合体となりますが、
18+ * 小規模なアプリケーションの場合、多くはDAOクラスが提供するインタフェースに近いサービスクラスが大量に発生する可能性があります。<br>
19+ * このクラスを利用することでエンティティ毎にDAOクラスを設ける必要がなくなり、冗長的なサービスクラスとDAOクラスの関係がなくなることを意味します。<br>
20+ *
21+ * </p>
22+ *
23+ * @author Kitagawa<br>
24+ *
25+ *<!--
26+ * 更新日 更新者 更新内容
27+ * 2013/08/16 Kitagawa 新規作成
28+ *-->
29+ */
30+public final class GeneralHibernateDAO extends AbstractHibernateDAO {
31+
32+ /**
33+ * コンストラクタ<br>
34+ * @param transaction トランザクション管理オブジェクト
35+ */
36+ public GeneralHibernateDAO(HibernateTransactionManager transaction) {
37+ super(transaction);
38+ }
39+
40+ /**
41+ * データベースクエリ条件オブジェクトを生成します。<br>
42+ * @param entityClass 対象エンティティクラス
43+ * @return データベースクエリ条件オブジェクト
44+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#createCriteria(java.lang.Class)
45+ */
46+ @Override
47+ public <C extends AbstractHibernateEntity> GenericCriteria<C> createCriteria(Class<C> entityClass) {
48+ return super.createCriteria(entityClass);
49+ }
50+
51+ /**
52+ * データベースクエリ条件オブジェクトを生成します。<br>
53+ * 対象エンティティが削除状態を保持するエンティティの場合、削除状態のエンティティを除外する条件を持ちます。<br>
54+ * @param entityClass 対象エンティティクラス
55+ * @return データベースクエリ条件オブジェクト
56+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#createCriteriaExcludeDeleted(java.lang.Class)
57+ */
58+ @Override
59+ public <C extends AbstractHibernateEntity> GenericCriteria<C> createCriteriaExcludeDeleted(Class<C> entityClass) {
60+ return super.createCriteriaExcludeDeleted(entityClass);
61+ }
62+
63+ /**
64+ * SQLデータベースクエリを生成します。<br>
65+ * DAOクラスにおいて当インタフェースを利用した場合、エンティティクラスで制限がかからないクエリとなることに注意して下さい。<br>
66+ * これは利用者がDAOクラスの位置づけ(エンティティ対応しているDAO)に注意して利用する必要があり、場合によってはアプリケーション開発規約で利用禁止とすることも検討して下さい。<br>
67+ * @param sql SQLデータベースクエリ
68+ * @return SQLデータベースクエリオブジェクト
69+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#createSQLQuery(java.lang.String)
70+ */
71+ @Override
72+ public SQLQuery createSQLQuery(String sql) {
73+ return super.createSQLQuery(sql);
74+ }
75+
76+ /**
77+ * HQLデータベースクエリを生成します。<br>
78+ * DAOクラスにおいて当インタフェースを利用した場合、エンティティクラスで制限がかからないクエリとなることに注意して下さい。<br>
79+ * これは利用者がDAOクラスの位置づけ(エンティティ対応しているDAO)に注意して利用する必要があり、場合によってはアプリケーション開発規約で利用禁止とすることも検討して下さい。<br>
80+ * @param hql HQLデータベースクエリ
81+ * @return HQLデータベースクエリオブジェクト
82+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#createHQLQuery(java.lang.String)
83+ */
84+ @Override
85+ public Query createHQLQuery(String hql) {
86+ return super.createHQLQuery(hql);
87+ }
88+
89+ /**
90+ * 指定されたレコードIDでエンティティを検索します。<br>
91+ * 当インタフェースは削除済の条件は加味されません。<br>
92+ * @param entityClass 対象エンティティクラス
93+ * @param id レコードID
94+ * @return エンティティオブジェクト
95+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#findById(java.lang.Class, java.lang.Integer)
96+ */
97+ @Override
98+ public <C extends AbstractHibernateEntity> C findById(Class<C> entityClass, Integer id) {
99+ return super.findById(entityClass, id);
100+ }
101+
102+ /**
103+ * データベースに登録されている全てのエンティティレコードを取得します。<br>
104+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
105+ * @param entityClass 対象エンティティクラス
106+ * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
107+ * @param orders ソート条件オブジェクト
108+ * @return エンティティレコードリスト
109+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#findAll(java.lang.Class, boolean, java.util.List)
110+ */
111+ @Override
112+ public <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass, boolean includeDeleted, List<Order> orders) {
113+ return super.findAll(entityClass, includeDeleted, orders);
114+ }
115+
116+ /**
117+ * データベースに登録されている全ての未削除エンティティレコードを取得します。<br>
118+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
119+ * @param entityClass 対象エンティティクラス
120+ * @param orders ソート条件オブジェクト
121+ * @return エンティティレコードリスト
122+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#findAll(java.lang.Class, java.util.List)
123+ */
124+ @Override
125+ public <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass, List<Order> orders) {
126+ return super.findAll(entityClass, orders);
127+ }
128+
129+ /**
130+ * データベースに登録されている全てのエンティティレコードを取得します。<br>
131+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
132+ * @param entityClass 対象エンティティクラス
133+ * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
134+ * @return エンティティレコードリスト
135+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#findAll(java.lang.Class, boolean)
136+ */
137+ @Override
138+ <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass, boolean includeDeleted) {
139+ return super.findAll(entityClass, includeDeleted);
140+ }
141+
142+ /**
143+ * データベースに登録されている全ての未削除エンティティレコードを取得します。<br>
144+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
145+ * @param entityClass 対象エンティティクラス
146+ * @return エンティティレコードリスト
147+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#findAll(java.lang.Class)
148+ */
149+ @Override
150+ public <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass) {
151+ return super.findAll(entityClass);
152+ }
153+
154+ /**
155+ * データベースに登録されているエンティティレコード数を取得します。<br>
156+ * @param entityClass 対象エンティティクラス
157+ * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
158+ * @return エンティティレコード数
159+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#countAll(java.lang.Class, boolean)
160+ */
161+ @Override
162+ public <C extends AbstractHibernateEntity> long countAll(Class<C> entityClass, boolean includeDeleted) {
163+ return super.countAll(entityClass, includeDeleted);
164+ }
165+
166+ /**
167+ * データベースに登録されている未削除のエンティティレコード数を取得します。<br>
168+ * @param entityClass 対象エンティティクラス
169+ * @return エンティティレコード数
170+ * @see org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO#countAll(java.lang.Class)
171+ */
172+ @Override
173+ public <C extends AbstractHibernateEntity> long countAll(Class<C> entityClass) {
174+ return super.countAll(entityClass);
175+ }
176+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateService.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateService.java (revision 398)
@@ -47,7 +47,7 @@
4747 * @param clazz データベースアクセスオブジェクトクラス
4848 * @return クラスインスタンス
4949 */
50- protected final <E extends AbstractHibernateEntity, D extends AbstractHibernateDAO<E>> D createDAO(Class<D> clazz) {
50+ protected final <D extends AbstractHibernateDAO> D createDAO(Class<D> clazz) {
5151 try {
5252 Constructor<D> constructor = clazz.getConstructor(new Class[] { HibernateTransactionManager.class });
5353 D instance = constructor.newInstance(new Object[] { getTransactionContext().getTransaction() });
@@ -105,15 +105,18 @@
105105 */
106106 protected final void save(AbstractHibernateEntity entity) {
107107 if (entity != null) {
108- if (entity.getEntryDate() == null) {
109- entity.setEntryUser(getTransactionContext().getProcessUser());
110- entity.setEntryDate(getTransactionContext().getProcessDate());
108+ if (entity instanceof AbstractHibernateDefaultEntity) {
109+ AbstractHibernateDefaultEntity defaultEntity = (AbstractHibernateDefaultEntity) entity;
110+ if (defaultEntity.getEntryDate() == null) {
111+ defaultEntity.setEntryUser(getTransactionContext().getProcessUser());
112+ defaultEntity.setEntryDate(getTransactionContext().getProcessDate());
113+ }
114+ defaultEntity.setEntryDate(getTransactionContext().getProcessDate());
115+ defaultEntity.setModifyUser(getTransactionContext().getProcessUser());
116+ defaultEntity.setModifyDate(getTransactionContext().getProcessDate());
117+ //defaultEntity.setDeleteType(DeleteType.VALIDATE);
118+ defaultEntity.setDeleteType(SCodeManager.getCode("S0001", "0"));
111119 }
112- entity.setEntryDate(getTransactionContext().getProcessDate());
113- entity.setModifyUser(getTransactionContext().getProcessUser());
114- entity.setModifyDate(getTransactionContext().getProcessDate());
115- //entity.setDeleteType(DeleteType.VALIDATE);
116- entity.setDeleteType(SCodeManager.getCode("S0001", "0"));
117120 entity.validate();
118121 getTransactionContext().getTransaction().getSession().saveOrUpdate(entity);
119122 }
@@ -137,16 +140,19 @@
137140 */
138141 protected final void delete(AbstractHibernateEntity entity) {
139142 if (entity != null) {
140- if (entity.getEntryDate() == null) {
141- entity.setEntryUser(getTransactionContext().getProcessUser());
142- entity.setEntryDate(getTransactionContext().getProcessDate());
143+ if (entity instanceof AbstractHibernateDefaultEntity) {
144+ AbstractHibernateDefaultEntity defaultEntity = (AbstractHibernateDefaultEntity) entity;
145+ if (defaultEntity.getEntryDate() == null) {
146+ defaultEntity.setEntryUser(getTransactionContext().getProcessUser());
147+ defaultEntity.setEntryDate(getTransactionContext().getProcessDate());
148+ }
149+ defaultEntity.setModifyUser(getTransactionContext().getProcessUser());
150+ defaultEntity.setModifyDate(getTransactionContext().getProcessDate());
151+ defaultEntity.setDeleteUser(getTransactionContext().getProcessUser());
152+ defaultEntity.setDeleteDate(getTransactionContext().getProcessDate());
153+ //defaultEntity.setDeleteType(DeleteType.DELETED);
154+ defaultEntity.setDeleteType(SCodeManager.getCode("S0001", "1"));
143155 }
144- entity.setModifyUser(getTransactionContext().getProcessUser());
145- entity.setModifyDate(getTransactionContext().getProcessDate());
146- entity.setDeleteUser(getTransactionContext().getProcessUser());
147- entity.setDeleteDate(getTransactionContext().getProcessDate());
148- //entity.setDeleteType(DeleteType.DELETED);
149- entity.setDeleteType(SCodeManager.getCode("S0001", "1"));
150156 entity.validate();
151157 getTransactionContext().getTransaction().getSession().saveOrUpdate(entity);
152158 }
@@ -168,7 +174,7 @@
168174 * エンティティを物理削除します。<br>
169175 * @param entity エンティティオブジェクト
170176 */
171- protected final void erase(AbstractHibernateEntity entity) {
177+ protected final void remove(AbstractHibernateEntity entity) {
172178 if (entity != null) {
173179 getTransactionContext().getTransaction().getSession().delete(entity);
174180 }
@@ -178,10 +184,10 @@
178184 * エンティティを論理削除します。<br>
179185 * @param entities エンティティオブジェクト
180186 */
181- protected final <E extends AbstractHibernateEntity> void erase(List<E> entities) {
187+ protected final <E extends AbstractHibernateEntity> void remove(List<E> entities) {
182188 if (entities != null) {
183189 for (AbstractHibernateEntity entity : entities) {
184- delete(entity);
190+ remove(entity);
185191 }
186192 }
187193 }
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractGenericHibernateDAO.java (nonexistent)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractGenericHibernateDAO.java (revision 398)
@@ -0,0 +1,161 @@
1+package org.phosphoresce.webcore.ext.hibernate4.transaction;
2+
3+import java.util.List;
4+
5+import org.hibernate.Query;
6+import org.hibernate.SQLQuery;
7+import org.hibernate.criterion.Order;
8+import org.phosphoresce.lib.commons.util.AnnotationUtil;
9+import org.phosphoresce.webcore.ext.hibernate4.annotation.HibernateDAO;
10+import org.phosphoresce.webcore.ext.hibernate4.exception.HibernateTransactionException;
11+
12+/**
13+ * Hibernateによるデータベースアクセス処理クラスの共通的なインタフェースを提供します。<br>
14+ * <p>
15+ * すべてのHibernateデータベースアクセスオブジェクトクラスはこのクラスを継承して実装します。<br>
16+ * また、データベースアクセスオブジェクトクラスは必ずクラスアノテーションに{@link HibernateDAO}を付与し、対象のエンティティを決定する必要があります。<br>
17+ * {@link HibernateDAO#entity()}で指定するエンティティクラスは必ず、このクラスジェネリクスに指定するエンティティクラスに一致させる必要があります。<br>
18+ * </p>
19+ *
20+ * @param <E> データベースアクセス対象エンティティクラス
21+ *
22+ * @author Kitagawa<br>
23+ *
24+ *<!--
25+ * 更新日 更新者 更新内容
26+ * 2013/02/01 Kitagawa 新規作成
27+ * 2013/07/21 Kitagawa 対象エンティティクラス取得をフックメソッドからアノテーションに変更
28+ * 2013/07/31 Kitagawa 汎用インタフェースを追加({@link #findAll(boolean)}、{@link #countAll(boolean)})
29+ * 2013/08/06 Kitagawa 総称型で指定したエンティティクラス以外のCriteriaを生成する汎用インタフェースを追加
30+ * 2013/08/13 Kitagawa クラス総称型指定のない汎用クラス{@link AbstractHibernateDAO}と分離
31+ *-->
32+ */
33+public abstract class AbstractGenericHibernateDAO<E extends AbstractHibernateEntity> extends AbstractHibernateDAO {
34+
35+ /**
36+ * コンストラクタ<br>
37+ * @param transaction トランザクション管理オブジェクト
38+ */
39+ protected AbstractGenericHibernateDAO(HibernateTransactionManager transaction) {
40+ super(transaction);
41+ }
42+
43+ /**
44+ * DAOクラスで対象とされているエンティティクラスを取得します。<br>
45+ * @return エンティティクラス
46+ */
47+ @SuppressWarnings("unchecked")
48+ private Class<E> getEntityClass() {
49+ HibernateDAO hibernateDAO = AnnotationUtil.getClassAnnotation(HibernateDAO.class, getClass());
50+ if (hibernateDAO == null) {
51+ throw new HibernateTransactionException("FHBN00025", new Object[] { getClass().getName() });
52+ }
53+ return (Class<E>) hibernateDAO.entity();
54+ }
55+
56+ /**
57+ * データベースクエリ条件オブジェクトを生成します。<br>
58+ * @return データベースクエリ条件オブジェクト
59+ */
60+ protected final GenericCriteria<E> createCriteria() {
61+ return super.createCriteria(getEntityClass());
62+ }
63+
64+ /**
65+ * データベースクエリ条件オブジェクトを生成します。<br>
66+ * 対象エンティティが削除状態を保持するエンティティの場合、削除状態のエンティティを除外する条件を持ちます。<br>
67+ * @return データベースクエリ条件オブジェクト
68+ */
69+ protected final GenericCriteria<E> createCriteriaExcludeDeleted() {
70+ return super.createCriteriaExcludeDeleted(getEntityClass());
71+ }
72+
73+ /**
74+ * SQLデータベースクエリを生成します。<br>
75+ * DAOクラスにおいて当インタフェースを利用した場合、総称型で指定されたエンティティクラスで制限がかからないクエリとなることに注意して下さい。<br>
76+ * これは利用者がDAOクラスの位置づけ(エンティティ対応しているDAO)に注意して利用する必要があり、場合によってはアプリケーション開発規約で利用禁止とすることも検討して下さい。<br>
77+ * @param sql SQLデータベースクエリ
78+ * @return SQLデータベースクエリオブジェクト
79+ */
80+ protected final SQLQuery createSQLQuery(String sql) {
81+ return super.createSQLQuery(sql);
82+ }
83+
84+ /**
85+ * HQLデータベースクエリを生成します。<br>
86+ * DAOクラスにおいて当インタフェースを利用した場合、総称型で指定されたエンティティクラスで制限がかからないクエリとなることに注意して下さい。<br>
87+ * これは利用者がDAOクラスの位置づけ(エンティティ対応しているDAO)に注意して利用する必要があり、場合によってはアプリケーション開発規約で利用禁止とすることも検討して下さい。<br>
88+ * @param hql HQLデータベースクエリ
89+ * @return HQLデータベースクエリオブジェクト
90+ */
91+ protected final Query createHQLQuery(String hql) {
92+ return super.createHQLQuery(hql);
93+ }
94+
95+ /**
96+ * 指定されたレコードIDでエンティティを検索します。<br>
97+ * 当インタフェースは削除済の条件は加味されません。<br>
98+ * @param id レコードID
99+ * @return エンティティオブジェクト
100+ */
101+ public final E findById(Integer id) {
102+ return super.findById(getEntityClass(), id);
103+ }
104+
105+ /**
106+ * データベースに登録されている全てのエンティティレコードを取得します。<br>
107+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
108+ * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
109+ * @param orders ソート条件オブジェクト
110+ * @return エンティティレコードリスト
111+ */
112+ public final List<E> findAll(boolean includeDeleted, List<Order> orders) {
113+ return super.findAll(getEntityClass(), includeDeleted, orders);
114+ }
115+
116+ /**
117+ * データベースに登録されている全ての未削除エンティティレコードを取得します。<br>
118+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
119+ * @param orders ソート条件オブジェクト
120+ * @return エンティティレコードリスト
121+ */
122+ public final List<E> findAll(List<Order> orders) {
123+ return super.findAll(getEntityClass(), false, orders);
124+ }
125+
126+ /**
127+ * データベースに登録されている全てのエンティティレコードを取得します。<br>
128+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
129+ * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
130+ * @return エンティティレコードリスト
131+ */
132+ public final List<E> findAll(boolean includeDeleted) {
133+ return super.findAll(getEntityClass(), includeDeleted, null);
134+ }
135+
136+ /**
137+ * データベースに登録されている全ての未削除エンティティレコードを取得します。<br>
138+ * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
139+ * @return エンティティレコードリスト
140+ */
141+ public final List<E> findAll() {
142+ return super.findAll(getEntityClass(), false);
143+ }
144+
145+ /**
146+ * データベースに登録されているエンティティレコード数を取得します。<br>
147+ * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
148+ * @return エンティティレコード数
149+ */
150+ public final long countAll(boolean includeDeleted) {
151+ return super.countAll(getEntityClass(), includeDeleted);
152+ }
153+
154+ /**
155+ * データベースに登録されている未削除のエンティティレコード数を取得します。<br>
156+ * @return エンティティレコード数
157+ */
158+ public final long countAll() {
159+ return super.countAll(getEntityClass(), false);
160+ }
161+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateDefaultEntity.java (nonexistent)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateDefaultEntity.java (revision 398)
@@ -0,0 +1,198 @@
1+package org.phosphoresce.webcore.ext.hibernate4.transaction;
2+
3+import java.util.Date;
4+
5+import javax.persistence.Column;
6+import javax.persistence.JoinColumn;
7+import javax.persistence.ManyToOne;
8+import javax.persistence.MappedSuperclass;
9+
10+import org.hibernate.annotations.JoinColumnOrFormula;
11+import org.hibernate.annotations.JoinColumnsOrFormulas;
12+import org.hibernate.annotations.JoinFormula;
13+import org.hibernate.annotations.Where;
14+import org.phosphoresce.webcore.ext.hibernate4.model.SCode;
15+import org.phosphoresce.webcore.ext.hibernate4.model.SUser;
16+
17+/**
18+ * 通常のアプリケーションデータベーステーブルエンティティの共通カラムフィールドインタフェースを提供します。<br>
19+ * <p>
20+ * Hibernateアドオンモジュールを利用したアプリケーションで利用する通常のエンティティはすべてこのクラスが継承されて提供されます。<br>
21+ * これはすべてのエンティティはレコードID、レコードバージョン番号及び、登録日時、登録者情報が必ず管理されることを意味します。<br>
22+ * また、これらのアクセッサインタフェースはユーザーからの利用ではGetterインタフェースのみ提供され、Setterインタフェースはアドオンモジュール側で制御するのみに制限されます。<br>
23+ * </p>
24+ *
25+ * @author Kitagawa<br>
26+ *
27+ *<!--
28+ * 更新日 更新者 更新内容
29+ * 2013/02/01 Kitagawa 新規作成
30+ *-->
31+ */
32+@MappedSuperclass
33+public abstract class AbstractHibernateDefaultEntity extends AbstractHibernateEntity {
34+
35+ /** 登録日時 */
36+ @Column(name = "entry_date")
37+ private Date entryDate;
38+
39+ /** 登録ユーザ */
40+ @ManyToOne
41+ @JoinColumn(name = "entry_user", referencedColumnName = "code")
42+ @Where(clause = "delete_type = '0'")
43+ private SUser entryUser;
44+
45+ /** 更新日時 */
46+ @Column(name = "modify_date")
47+ private Date modifyDate;
48+
49+ /** 更新ユーザ */
50+ @ManyToOne
51+ @JoinColumn(name = "modify_user", referencedColumnName = "code")
52+ @Where(clause = "delete_type = '0'")
53+ private SUser modifyUser;
54+
55+ /** 削除日時 */
56+ @Column(name = "delete_date")
57+ private Date deleteDate;
58+
59+ /** 削除ユーザ */
60+ @ManyToOne
61+ @JoinColumn(name = "delete_user", referencedColumnName = "code")
62+ @Where(clause = "delete_type = '0'")
63+ private SUser deleteUser;
64+
65+ /** 削除状態 */
66+ @ManyToOne
67+ //@JoinFormula(referencedColumnName = "code", value = "(select s_code.code from s_code where s_code.category = 'S0001' and s_code.code = delete_type)")
68+ @JoinColumnsOrFormulas({ //
69+ @JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "category", value = "'S0001'")), //
70+ @JoinColumnOrFormula(column = @JoinColumn(referencedColumnName = "code", name = "delete_type", nullable = false)) //
71+ })
72+ private SCode deleteType;
73+
74+ /**
75+ * データベース登録処理前のエンティティ内容の整合処理を実施します。<br>
76+ */
77+ void validate() {
78+ validateEntity();
79+ }
80+
81+ /**
82+ * データベース登録処理前のエンティティ内容の整合処理を実施します。<br>
83+ * 当処理はエンティティ毎に処理が異なります。<br>
84+ */
85+ protected abstract void validateEntity();
86+
87+ /**
88+ * 登録日時を取得します。<br>
89+ * @return 登録日時
90+ */
91+ public final Date getEntryDate() {
92+ return entryDate;
93+ }
94+
95+ /**
96+ * 登録日時を設定します。<br>
97+ * @param entryDate 登録日時
98+ */
99+ final void setEntryDate(Date entryDate) {
100+ this.entryDate = entryDate;
101+ }
102+
103+ /**
104+ * 登録ユーザを取得します。<br>
105+ * @return 登録ユーザ
106+ */
107+ public SUser getEntryUser() {
108+ return entryUser;
109+ }
110+
111+ /**
112+ * 登録ユーザを設定します。<br>
113+ * @param entryUser 登録ユーザ
114+ */
115+ void setEntryUser(SUser entryUser) {
116+ this.entryUser = entryUser;
117+ }
118+
119+ /**
120+ * 更新日時を取得します。<br>
121+ * @return 更新日時
122+ */
123+ public final Date getModifyDate() {
124+ return modifyDate;
125+ }
126+
127+ /**
128+ * 更新日時を設定します。<br>
129+ * @param modifyDate 更新日時
130+ */
131+ final void setModifyDate(Date modifyDate) {
132+ this.modifyDate = modifyDate;
133+ }
134+
135+ /**
136+ * 更新ユーザを取得します。<br>
137+ * @return 更新ユーザ
138+ */
139+ public SUser getModifyUser() {
140+ return modifyUser;
141+ }
142+
143+ /**
144+ * 更新ユーザを設定します。<br>
145+ * @param modifyUser 更新ユーザ
146+ */
147+ void setModifyUser(SUser modifyUser) {
148+ this.modifyUser = modifyUser;
149+ }
150+
151+ /**
152+ * 削除日時を取得します。<br>
153+ * @return 削除日時
154+ */
155+ public final Date getDeleteDate() {
156+ return deleteDate;
157+ }
158+
159+ /**
160+ * 削除日時を設定します。<br>
161+ * @param deleteDate 削除日時
162+ */
163+ final void setDeleteDate(Date deleteDate) {
164+ this.deleteDate = deleteDate;
165+ }
166+
167+ /**
168+ * 削除ユーザを取得します。<br>
169+ * @return 削除ユーザ
170+ */
171+ public SUser getDeleteUser() {
172+ return deleteUser;
173+ }
174+
175+ /**
176+ * 削除ユーザを設定します。<br>
177+ * @param deleteUser 削除ユーザ
178+ */
179+ public void setDeleteUser(SUser deleteUser) {
180+ this.deleteUser = deleteUser;
181+ }
182+
183+ /**
184+ * 削除状態を取得します。<br>
185+ * @return 削除状態
186+ */
187+ public SCode getDeleteType() {
188+ return deleteType;
189+ }
190+
191+ /**
192+ * 削除状態を設定します。<br>
193+ * @param deleteType 削除状態
194+ */
195+ public void setDeleteType(SCode deleteType) {
196+ this.deleteType = deleteType;
197+ }
198+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateDAO.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateDAO.java (revision 398)
@@ -5,18 +5,19 @@
55 import java.util.List;
66
77 import org.hibernate.Criteria;
8-import org.hibernate.criterion.Criterion;
8+import org.hibernate.Query;
9+import org.hibernate.SQLQuery;
10+import org.hibernate.Session;
911 import org.hibernate.criterion.Order;
10-import org.phosphoresce.lib.commons.util.AnnotationUtil;
11-import org.phosphoresce.webcore.ext.hibernate4.annotation.HibernateDAO;
12-import org.phosphoresce.webcore.ext.hibernate4.exception.HibernateTransactionException;
12+import org.phosphoresce.lib.commons.util.ReflectionUtil;
13+import org.phosphoresce.webcore.ext.hibernate4.util.SCodeManager;
1314
1415 /**
15- * Hibernateによるデータベースアクセス処理クラスの共通的なインタフェースを提供します。<br>
16+ * 任意のエンティティに対するHibernateデータベースアクセス処理クラスの共通的なインタフェースを提供します。<br>
1617 * <p>
17- * すべてのHibernateデータベースアクセスオブジェクトクラスはこのクラスを継承して実装します。<br>
18- * また、データベースアクセスオブジェクトクラスは必ずクラスアノテーションに{@link HibernateDAO}を付与し、対象のエンティティを決定する必要があります。<br>
19- * {@link HibernateDAO#entity()}で指定するエンティティクラスは必ず、このクラスジェネリクスに指定するエンティティクラスに一致させる必要があります。<br>
18+ * このクラスが提供するインタフェースはそれぞれのメソッドで利用するエンティティクラスを指定します。<br>
19+ * アプリケーション開発時に作成するデータベースアクセスオブジェクトはこのクラスではなく、{@link AbstractGenericHibernateDAO}を継承して作成します。<br>
20+ * このクラスは、汎用的なデータベースアクセスオブジェクトを作成する際に、総称型によるエンティティ制限を設けることが出来ない為に設けられました。<br>
2021 * </p>
2122 *
2223 * @param <E> データベースアクセス対象エンティティクラス
@@ -25,24 +26,19 @@
2526 *
2627 *<!--
2728 * 更新日 更新者 更新内容
28- * 2013/02/01 Kitagawa 新規作成
29- * 2013/07/21 Kitagawa 対象エンティティクラス取得をフックメソッドからアノテーションに変更
30- * 2013/07/31 Kitagawa 汎用インタフェースを追加({@link #findAll(boolean)}、{@link #countAll(boolean)})
29+ * 2013/08/16 Kitagawa 新規作成
3130 *-->
3231 */
33-public abstract class AbstractHibernateDAO<E extends AbstractHibernateEntity> {
32+abstract class AbstractHibernateDAO {
3433
35- /** エンティティカラム名(削除ユーザ) */
36- public static final String COLUMN_DELETE_USER = "deleteUser";
37-
3834 /** トランザクション管理オブジェクト */
39- private HibernateTransactionManager transaction;
35+ HibernateTransactionManager transaction;
4036
4137 /**
4238 * コンストラクタ<br>
4339 * @param transaction トランザクション管理オブジェクト
4440 */
45- protected AbstractHibernateDAO(HibernateTransactionManager transaction) {
41+ AbstractHibernateDAO(HibernateTransactionManager transaction) {
4642 if (transaction == null) {
4743 throw new NullPointerException();
4844 }
@@ -51,36 +47,60 @@
5147
5248 /**
5349 * データベースクエリ条件オブジェクトを生成します。<br>
50+ * @param entityClass 対象エンティティクラス
5451 * @return データベースクエリ条件オブジェクト
5552 */
56- protected final GenericCriteria<E> createCriteria() {
57- HibernateDAO hibernateDAO = AnnotationUtil.getClassAnnotation(HibernateDAO.class, getClass());
58- if (hibernateDAO == null) {
59- throw new HibernateTransactionException("FHBN00025", new Object[] { getClass().getName() });
60- }
61- Class<? extends AbstractHibernateEntity> entityClass = hibernateDAO.entity();
62- Criteria criteria = transaction.getSession().createCriteria(entityClass);
63- return new GenericCriteria<E>(criteria);
53+ <C extends AbstractHibernateEntity> GenericCriteria<C> createCriteria(Class<C> entityClass) {
54+ Session session = transaction.getSession();
55+ Criteria criteria = session.createCriteria(entityClass);
56+ return new GenericCriteria<C>(criteria);
6457 }
6558
6659 /**
6760 * データベースクエリ条件オブジェクトを生成します。<br>
61+ * 対象エンティティが削除状態を保持するエンティティの場合、削除状態のエンティティを除外する条件を持ちます。<br>
62+ * @param entityClass 対象エンティティクラス
6863 * @return データベースクエリ条件オブジェクト
6964 */
70- protected final GenericCriteria<E> createCriteriaExcludeDeleted() {
71- GenericCriteria<E> criteria = createCriteria();
72- criteria.add(isNull(COLUMN_DELETE_USER));
65+ <C extends AbstractHibernateEntity> GenericCriteria<C> createCriteriaExcludeDeleted(Class<C> entityClass) {
66+ GenericCriteria<C> criteria = createCriteria(entityClass);
67+ if (ReflectionUtil.getSuperclasses(entityClass).contains(AbstractHibernateDefaultEntity.class)) {
68+ criteria.add(ne("deleteType", SCodeManager.getCode("S0001", "1")));
69+ }
7370 return criteria;
7471 }
7572
7673 /**
74+ * SQLデータベースクエリを生成します。<br>
75+ * DAOクラスにおいて当インタフェースを利用した場合、エンティティクラスで制限がかからないクエリとなることに注意して下さい。<br>
76+ * これは利用者がDAOクラスの位置づけ(エンティティ対応しているDAO)に注意して利用する必要があり、場合によってはアプリケーション開発規約で利用禁止とすることも検討して下さい。<br>
77+ * @param sql SQLデータベースクエリ
78+ * @return SQLデータベースクエリオブジェクト
79+ */
80+ SQLQuery createSQLQuery(String sql) {
81+ return transaction.getSession().createSQLQuery(sql);
82+ }
83+
84+ /**
85+ * HQLデータベースクエリを生成します。<br>
86+ * DAOクラスにおいて当インタフェースを利用した場合、エンティティクラスで制限がかからないクエリとなることに注意して下さい。<br>
87+ * これは利用者がDAOクラスの位置づけ(エンティティ対応しているDAO)に注意して利用する必要があり、場合によってはアプリケーション開発規約で利用禁止とすることも検討して下さい。<br>
88+ * @param hql HQLデータベースクエリ
89+ * @return HQLデータベースクエリオブジェクト
90+ */
91+ Query createHQLQuery(String hql) {
92+ return transaction.getSession().createQuery(hql);
93+ }
94+
95+ /**
7796 * 指定されたレコードIDでエンティティを検索します。<br>
7897 * 当インタフェースは削除済の条件は加味されません。<br>
98+ * @param entityClass 対象エンティティクラス
7999 * @param id レコードID
80100 * @return エンティティオブジェクト
81101 */
82- public final E findById(Integer id) {
83- GenericCriteria<E> criteria = createCriteria();
102+ <C extends AbstractHibernateEntity> C findById(Class<C> entityClass, Integer id) {
103+ GenericCriteria<C> criteria = createCriteria(entityClass);
84104 criteria.add(idEq(id));
85105 return criteria.uniqueResult();
86106 }
@@ -88,16 +108,17 @@
88108 /**
89109 * データベースに登録されている全てのエンティティレコードを取得します。<br>
90110 * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
111+ * @param entityClass 対象エンティティクラス
91112 * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
92113 * @param orders ソート条件オブジェクト
93114 * @return エンティティレコードリスト
94115 */
95- public final List<E> findAll(boolean includeDeleted, List<Order> orders) {
96- GenericCriteria<E> criteria = null;
116+ <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass, boolean includeDeleted, List<Order> orders) {
117+ GenericCriteria<C> criteria = null;
97118 if (includeDeleted) {
98- criteria = createCriteria();
119+ criteria = createCriteria(entityClass);
99120 } else {
100- criteria = createCriteriaExcludeDeleted();
121+ criteria = createCriteriaExcludeDeleted(entityClass);
101122 }
102123 if (orders != null) {
103124 for (Order order : orders) {
@@ -110,69 +131,47 @@
110131 /**
111132 * データベースに登録されている全ての未削除エンティティレコードを取得します。<br>
112133 * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
134+ * @param entityClass 対象エンティティクラス
113135 * @param orders ソート条件オブジェクト
114136 * @return エンティティレコードリスト
115137 */
116- public final List<E> findAll(List<Order> orders) {
117- return findAll(false, orders);
138+ <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass, List<Order> orders) {
139+ return findAll(entityClass, false, orders);
118140 }
119141
120142 /**
121143 * データベースに登録されている全てのエンティティレコードを取得します。<br>
122144 * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
145+ * @param entityClass 対象エンティティクラス
123146 * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
124147 * @return エンティティレコードリスト
125148 */
126- public final List<E> findAll(boolean includeDeleted) {
127- return findAll(includeDeleted, null);
149+ <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass, boolean includeDeleted) {
150+ return findAll(entityClass, includeDeleted, null);
128151 }
129152
130153 /**
131154 * データベースに登録されている全ての未削除エンティティレコードを取得します。<br>
132155 * マスタデータ等で利用されることはありますが、通常のトランザクションデータ等では利用されることは想定されません。
156+ * @param entityClass 対象エンティティクラス
133157 * @return エンティティレコードリスト
134158 */
135- public final List<E> findAll() {
136- return findAll(false);
159+ <C extends AbstractHibernateEntity> List<C> findAll(Class<C> entityClass) {
160+ return findAll(entityClass, false);
137161 }
138162
139163 /**
140- * 指定された検索条件及び、ソート条件に合致するエンティティを検索します。<br>
141- * 当インタフェースは削除済の条件は加味されません。<br>
142- * 当インタフェースはDAOより上位レイヤから利用可能とした場合、DAOレイヤとサービスレイヤとのスコープ定義が曖昧になります。<br>
143- * 但し、システム規模によってはサービスを機能単位で設けることが生産性向上につながる場合もある為、当メソッドはfinal属性を
144- * 持たないprotectedインタフェースとして設置されています。<br>
145- * これは各システムの共通DAOクラスでpublicレベルに昇格させることで、サービスレイヤからDAO処理が利用出来ることを表します。<br>
146- * @param criterions 検索条件
147- * @param orders ソート条件オブジェクト
148- * @return エンティティオブジェクトリスト
149- */
150- protected List<E> findByCriterions(List<Criterion> criterions, List<Order> orders) {
151- GenericCriteria<E> criteria = createCriteria();
152- if (criterions != null) {
153- for (Criterion criterion : criterions) {
154- criteria.add(criterion);
155- }
156- }
157- if (orders != null) {
158- for (Order order : orders) {
159- criteria.addOrder(order);
160- }
161- }
162- return criteria.list();
163- }
164-
165- /**
166164 * データベースに登録されているエンティティレコード数を取得します。<br>
165+ * @param entityClass 対象エンティティクラス
167166 * @param includeDeleted 論理削除済みデータを含める場合にtrueを指定
168167 * @return エンティティレコード数
169168 */
170- public final long countAll(boolean includeDeleted) {
171- GenericCriteria<E> criteria = null;
169+ <C extends AbstractHibernateEntity> long countAll(Class<C> entityClass, boolean includeDeleted) {
170+ GenericCriteria<C> criteria = null;
172171 if (includeDeleted) {
173- criteria = createCriteria();
172+ criteria = createCriteria(entityClass);
174173 } else {
175- criteria = createCriteriaExcludeDeleted();
174+ criteria = createCriteriaExcludeDeleted(entityClass);
176175 }
177176 return criteria.count();
178177 }
@@ -179,9 +178,10 @@
179178
180179 /**
181180 * データベースに登録されている未削除のエンティティレコード数を取得します。<br>
181+ * @param entityClass 対象エンティティクラス
182182 * @return エンティティレコード数
183183 */
184- public final long countAll() {
185- return countAll(false);
184+ <C extends AbstractHibernateEntity> long countAll(Class<C> entityClass) {
185+ return countAll(entityClass, false);
186186 }
187187 }
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateExpirableEntity.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/transaction/AbstractHibernateExpirableEntity.java (revision 398)
@@ -20,7 +20,7 @@
2020 *-->
2121 */
2222 @MappedSuperclass
23-public abstract class AbstractHibernateExpirableEntity extends AbstractHibernateEntity {
23+public abstract class AbstractHibernateExpirableEntity extends AbstractHibernateDefaultEntity {
2424
2525 /** 有効期間開始 */
2626 @Column(name = "expiry_start", nullable = false)
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/HibernateConfigName.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/HibernateConfigName.java (revision 398)
@@ -24,6 +24,12 @@
2424 /** Hibernate環境設定リソースパス定義 */
2525 public static final HibernateConfigName HIBERNATE_CONFIG = new HibernateConfigName("hibernate.config");
2626
27+ /** コードマスタ定義Excel配置パス定義 */
28+ public static final HibernateConfigName HIBERNATE_CODEMASTER_PATH = new HibernateConfigName("hibernate.codemaster.path");
29+
30+ /** コードマスタ定義Excel配置パス定義 */
31+ public static final HibernateConfigName HIBERNATE_CODEMASTER_AUTOLOAD = new HibernateConfigName("hibernate.codemaster.autoload");
32+
2733 /** Hibernateアノテーションモデル定義 */
2834 public static final HibernateConfigName HIBERNATE_ANNOTATION_CLASSES = new HibernateConfigName("hibernate.annotation.classes");
2935
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/HibernateConfiguration.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/HibernateConfiguration.java (revision 398)
@@ -1,5 +1,7 @@
11 package org.phosphoresce.webcore.ext.hibernate4;
22
3+import java.io.File;
4+import java.text.SimpleDateFormat;
35 import java.util.Date;
46 import java.util.List;
57
@@ -9,6 +11,9 @@
911 import org.phosphoresce.lib.commons.util.PropertiesUtil;
1012 import org.phosphoresce.lib.commons.util.StringUtil;
1113 import org.phosphoresce.lib.jod.JODSOfficeProcessManager;
14+import org.phosphoresce.lib.poi.PoiWorkbookType;
15+import org.phosphoresce.lib.poi.adapter.PoiSheet;
16+import org.phosphoresce.lib.poi.adapter.PoiWorkbook;
1217 import org.phosphoresce.webcore.core.GlobalEnvironment;
1318 import org.phosphoresce.webcore.core.config.Config;
1419 import org.phosphoresce.webcore.core.exception.WebcoreConfigurationException;
@@ -15,6 +20,7 @@
1520 import org.phosphoresce.webcore.core.logger.CodeConvertLogger;
1621 import org.phosphoresce.webcore.ext.hibernate4.exception.HibernateConfigureException;
1722 import org.phosphoresce.webcore.ext.hibernate4.model.SCode;
23+import org.phosphoresce.webcore.ext.hibernate4.model.SConfig;
1824 import org.phosphoresce.webcore.ext.hibernate4.model.SUser;
1925 import org.phosphoresce.webcore.ext.hibernate4.service.SystemMasterService;
2026 import org.phosphoresce.webcore.ext.hibernate4.transaction.HibernateTransactionContext;
@@ -58,6 +64,7 @@
5864 log.output("FHBN00001");
5965
6066 configureEvironment();
67+ configureSCodeAutoload();
6168 configureSCodeManager();
6269
6370 log.output("FHBN00002");
@@ -131,6 +138,99 @@
131138 }
132139
133140 /**
141+ * システムコードマスタの自動登録処理を行います。<br>
142+ * @throws Throwable 処理中に予期せぬエラーが発生した場合にスローされます
143+ */
144+ private synchronized static void configureSCodeAutoload() throws Throwable {
145+ HibernateTransactionManager transaction = null;
146+ HibernateTransactionContext<SUser> context = null;
147+ SystemMasterService service = null;
148+
149+ /*
150+ * 自動ロード設定が行われていない場合は処理スキップ
151+ */
152+ if (!Config.getBoolean(HibernateConfigName.HIBERNATE_CODEMASTER_AUTOLOAD)) {
153+ log.output("FHBN00027");
154+ return;
155+ }
156+
157+ try {
158+ transaction = new HibernateTransactionManager();
159+ context = new HibernateTransactionContext<SUser>(transaction, null, new Date());
160+ service = new SystemMasterService(context);
161+ transaction.open();
162+
163+ /*
164+ * 未登録又はExcelファイル更新日が新しい場合は登録を行う
165+ */
166+ SConfig sConfig = service.getSConfigByProperty(SCONFIG_KEY_SCODE_LOAD_TIMESTAMP);
167+ SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
168+ long excelTimestamp = new File(Config.getString(HibernateConfigName.HIBERNATE_CODEMASTER_PATH)).lastModified();
169+ boolean load = false;
170+ if (sConfig == null) {
171+ log.output("FHBN00029");
172+ load = true;
173+ } else {
174+ String lastmodified = sConfig.getValue1();
175+ long registedTimestamp = timestampFormat.parse(lastmodified).getTime();
176+ if (registedTimestamp < excelTimestamp) {
177+ log.output("FHBN00030");
178+ load = true;
179+ } else {
180+ log.output("FHBN00028");
181+ load = false;
182+ }
183+ }
184+ if (load) {
185+ service.removeAllSCode();
186+ PoiWorkbook workbook = new PoiWorkbook(PoiWorkbookType.EXCEL2003, Config.getString(HibernateConfigName.HIBERNATE_CODEMASTER_PATH));
187+ PoiSheet sheet = workbook.getSheet(0);
188+ for (int i = 1; i <= sheet.getLastRowNum(); i++) {
189+ String category = sheet.getCell(i, 0).getString();
190+ String code = sheet.getCell(i, 1).getString();
191+ String orderNo = sheet.getCell(i, 2).getString();
192+ String caption = sheet.getCell(i, 3).getString();
193+ String shortCaption = sheet.getCell(i, 4).getString();
194+ String definition1 = sheet.getCell(i, 5).getString();
195+ String definition2 = sheet.getCell(i, 6).getString();
196+ String definition3 = sheet.getCell(i, 7).getString();
197+ String definition4 = sheet.getCell(i, 8).getString();
198+ String definition5 = sheet.getCell(i, 9).getString();
199+ if (StringUtil.isEmpty(category)) {
200+ continue;
201+ }
202+ SCode sCode = new SCode();
203+ sCode.setCategory(category);
204+ sCode.setCode(code);
205+ sCode.setOrderNo(Integer.parseInt(orderNo));
206+ sCode.setCaption(caption);
207+ sCode.setShortCaption(shortCaption);
208+ sCode.setDefinition1(definition1);
209+ sCode.setDefinition2(definition2);
210+ sCode.setDefinition3(definition3);
211+ sCode.setDefinition4(definition4);
212+ sCode.setDefinition5(definition5);
213+ service.registSCode(sCode);
214+ log.output("FHBN00031", category, code, caption);
215+ }
216+ if (sConfig == null) {
217+ sConfig = new SConfig();
218+ sConfig.setProperty(SCONFIG_KEY_SCODE_LOAD_TIMESTAMP);
219+ }
220+ sConfig.setValue1(timestampFormat.format(new Date(excelTimestamp)));
221+ service.registSConfig(sConfig);
222+ }
223+ } catch (Throwable e) {
224+ throw e;
225+ } finally {
226+ if (transaction != null) {
227+ transaction.commit();
228+ transaction.close();
229+ }
230+ }
231+ }
232+
233+ /**
134234 * システムコードマスタ管理クラスの初期化を行います。<br>
135235 * @throws Throwable 処理中に予期せぬエラーが発生した場合にスローされます
136236 */
@@ -145,7 +245,7 @@
145245 service = new SystemMasterService(context);
146246 transaction.open();
147247
148- List<SCode> sCodes = service.searchAllSCode();
248+ List<SCode> sCodes = service.getAllSCode();
149249 SCodeManager.initialize(sCodes);
150250 } catch (Throwable e) {
151251 throw e;
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/annotation/HibernateDAO.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/annotation/HibernateDAO.java (revision 398)
@@ -7,13 +7,13 @@
77 import java.lang.annotation.RetentionPolicy;
88 import java.lang.annotation.Target;
99
10-import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateDAO;
10+import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractGenericHibernateDAO;
1111 import org.phosphoresce.webcore.ext.hibernate4.transaction.AbstractHibernateEntity;
1212
1313 /**
1414 * Hibernateを利用するデータベースアクセスオブジェクトクラスの注釈インタフェースを提供します。<br>
1515 * <br>
16- * {@link AbstractHibernateDAO}を継承したデータベースアクセスオブジェクトクラスを実装する場合、必ずこのアノテーションを付与する必要があります。<br>
16+ * {@link AbstractGenericHibernateDAO}を継承したデータベースアクセスオブジェクトクラスを実装する場合、必ずこのアノテーションを付与する必要があります。<br>
1717 *
1818 * @author Kitagawa<br>
1919 *
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/util/SCodeManager.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/util/SCodeManager.java (revision 398)
@@ -89,7 +89,7 @@
8989 * @return システムコードマスタエンティティ
9090 */
9191 public static SCode getCode(String category, String code) {
92- Map<String, SCode> categorizedData = SCodeManager.instance().data.get(category);
92+ Map<String, SCode> categorizedData = SCodeManager.instance().data == null ? null : SCodeManager.instance().data.get(category);
9393 if (categorizedData == null) {
9494 return null;
9595 } else {
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/HibernateConstants.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_hibernate4/org/phosphoresce/webcore/ext/hibernate4/HibernateConstants.java (revision 398)
@@ -23,4 +23,7 @@
2323
2424 /** 環境設定リソース拡張子(Properties) */
2525 public static final String CONFIG_PROPERTIES_EXTENSION = ".properties";
26+
27+ /** 環境設定マスタキー(コードマスタロードタイムスタンプ) */
28+ public static final String SCONFIG_KEY_SCODE_LOAD_TIMESTAMP = "codemaster.lastmodified";
2629 }
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/function/FS00001/FS00001Util.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/function/FS00001/FS00001Util.java (revision 398)
@@ -4,8 +4,6 @@
44
55 /**
66 * サンプル機能ユーティリティクラスです(ログイン画面)。<br>
7- * <p>
8- * </p>
97 *
108 * @author Kitagawa<br>
119 *
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/function/FS00002/FS00002Util.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/function/FS00002/FS00002Util.java (revision 398)
@@ -13,8 +13,6 @@
1313
1414 /**
1515 * サンプル機能ユーティリティクラスです(メニュー画面)。<br>
16- * <p>
17- * </p>
1816 *
1917 * @author Kitagawa<br>
2018 *
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/function/FS00003/FS00003Util.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/function/FS00003/FS00003Util.java (revision 398)
@@ -4,8 +4,6 @@
44
55 /**
66 * サンプル機能ユーティリティクラスです(サンプルダイアログ画面)。<br>
7- * <p>
8- * </p>
97 *
108 * @author Kitagawa<br>
119 *
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/service/SampleSUserService.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/service/SampleSUserService.java (revision 398)
@@ -2,6 +2,7 @@
22
33 import org.phosphoresce.lib.commons.util.StringUtil;
44 import org.phosphoresce.webcore.ext.hibernate4.model.SUser;
5+import org.phosphoresce.webcore.ext.hibernate4.util.SCodeManager;
56
67 import sample.org.phosphoresce.webcore.ext.struts.common.action.SampleHibernateService;
78 import sample.org.phosphoresce.webcore.ext.struts.common.action.SampleHibernateTransactionContext;
@@ -8,8 +9,6 @@
89
910 /**
1011 * ユーザーマスタテーブルサンプルサービスクラスです。<br>
11- * <p>
12- * </p>
1312 *
1413 * @author Kitagawa<br>
1514 *
@@ -22,7 +21,7 @@
2221
2322 /**
2423 * コンストラクタ<br>
25- * @param transactionContext
24+ * @param transactionContext トランザクション処理コンテキストオブジェクト
2625 */
2726 public SampleSUserService(SampleHibernateTransactionContext transactionContext) {
2827 super(transactionContext);
@@ -51,7 +50,7 @@
5150 public long countAllUser() {
5251 return sUserDAO.countAll();
5352 }
54-
53+
5554 /**
5655 * 指定された内容で新規にユーザーを登録します。<br>
5756 * @param code ユーザーID
@@ -66,6 +65,7 @@
6665 sUser.setPassword(StringUtil.toMD5Hash(password));
6766 sUser.setFirstName(firstName);
6867 sUser.setLastName(lastName);
68+ sUser.setRoleType(SCodeManager.getCode("S0002", "0"));
6969
7070 save(sUser);
7171
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleAction.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleAction.java (revision 398)
@@ -11,6 +11,9 @@
1111 /**
1212 * サンプルアプリケーション共通上位抽象アクションクラスです。<br>
1313 * <p>
14+ * アプリケーションの各画面アクションは全てこのアクションが継承されたサブクラスとして作成します。<br>
15+ * </p>
16+ * <p>
1417 * 当クラスではアクションクラスにおける以下に示す共通のアノテーション付与及び、総称型の指定を行います。<br>
1518 * 機能ごとのサブアクションクラスではこのクラスで決定された共通のアノテーション、総称型指定は省略して実装を行います。<br>
1619 * <ul>
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleLogic.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleLogic.java (revision 398)
@@ -11,6 +11,9 @@
1111 /**
1212 * サンプルアプリケーション共通上位抽象Hibernateロジッククラスです。<br>
1313 * <p>
14+ * アプリケーションの各画面ロジッククラスはすべてこのクラスを継承して作成します。<br>
15+ * </p>
16+ * <p>
1417 * 当クラスではHibernateを利用するロジッククラスにおける以下に示す共通のアノテーション付与及び、総称型の指定を行います。<br>
1518 * 機能ごとのサブロジッククラスではこのクラスで決定された共通のアノテーション、総称型指定は省略して実装を行います。<br>
1619 * <ul>
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleUtil.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleUtil.java (revision 398)
@@ -3,6 +3,9 @@
33 /**
44 * サンプルアプリケーション共通ユーティリティを提供します。<br>
55 * <p>
6+ * アプリケーションの各画面ユーティリティは全てこのユーティリティが継承されたサブクラスとして作成します。<br>
7+ * </p>
8+ * <p>
69 * staticなメソッドの集合体であるユーティリティクラスの継承関係は本来必要ありません。<br>
710 * 但し、他のクラス同様に継承関係を持たせておくことで、将来的に共通のユーティリティメソッドを追加する場合などで、
811 * 機能ごとのユーティリティクラス利用箇所から共通のユーティリティメソッドを利用するように容易にリファクタリングを行える構成とします。<br>
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleHibernateService.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleHibernateService.java (revision 398)
@@ -10,6 +10,10 @@
1010 /**
1111 * サンプルアプリケーション共通上位抽象Hibernateサービスクラスです。<br>
1212 * <p>
13+ * Hibernateアドオンモジュールを利用したデータベースアクセスを行う業務処理実行サービス上位クラスです。<br>
14+ * アプリケーションで作成するサービスクラスは全てこのクラスを継承して作成します。<br>
15+ * </p>
16+ * <p>
1317 * 当クラスではHibernateを利用するサービスクラスにおける以下に示す共通のアノテーション付与及び、総称型の指定を行います。<br>
1418 * 機能ごとのサブサービスクラスではこのクラスで決定された共通のアノテーション、総称型指定は省略して実装を行います。<br>
1519 * <ul>
@@ -50,7 +54,6 @@
5054 */
5155 public SampleHibernateService(SampleHibernateTransactionContext transactionContext) {
5256 super(transactionContext);
53-
5457 sCodeDAO = createDAO(SCodeDAO.class);
5558 sUserDAO = createDAO(SUserDAO.class);
5659 }
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleForm.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleForm.java (revision 398)
@@ -8,6 +8,10 @@
88 /**
99 * サンプルアプリケーション共通上位抽象フォームクラスです。<br>
1010 * <p>
11+ * 各画面フォームクラスは全てこのフォームクラスを継承したクラスとして作成します。<br>
12+ * フレームワーク共通のフィールドは更に上位のフォームクラスで提供されている為、サブクラスで個別に設ける必要はありません。<br>
13+ * </p>
14+ * <p>
1115 * 当クラスではフォームクラスにおける以下に示す共通のアノテーション付与及び、総称型の指定を行います。<br>
1216 * 機能ごとのサブフォームクラスではこのクラスで決定された共通のアノテーション、総称型指定は省略して実装を行います。<br>
1317 * <ul>
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleSession.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleSession.java (revision 398)
@@ -6,8 +6,8 @@
66 /**
77 * サンプルアプリケーション共通画面セッションデータを提供します。<br>
88 * <p>
9- * 機能ごとに設けられる画面セッションデータクラスはこのクラスを継承して実装します。<br>
10- * この継承関係を持たせることにより、アプリケーションで共通のセッションデータ管理を追加する際などで影響範囲を最小限にとどめることが可能となります。<br>
9+ * アプリケーションの各画面セッションクラスはすべてこのクラスを継承して作成します。<br>
10+ * 全ての画面共通で保持させたいセッションデータがある場合はここに定義されます。<br>
1111 * </p>
1212 *
1313 * @author Kitagawa<br>
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleConstants.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleConstants.java (revision 398)
@@ -5,7 +5,7 @@
55 /**
66 * サンプルアプリケーション共通定数を提供します。<br>
77 * <p>
8- * 機能ごとに設けられる定数インタフェースはここで提供されるアプリケーション共通の定数インタフェースを継承して実装します。<br>
8+ * 各画面定数インタフェースは全てこのインタフェースを継承したインタフェースとして作成します。<br>
99 * </p>
1010 *
1111 * @author Kitagawa<br>
--- develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleHibernateTransactionContext.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/sample_struts/sample/org/phosphoresce/webcore/ext/struts/common/action/SampleHibernateTransactionContext.java (revision 398)
@@ -9,6 +9,10 @@
99 /**
1010 * サンプルアプリケーション共通上位抽象Hibernateトランザクションコンテキストクラスです。<br>
1111 * <p>
12+ * Hibernateアドオンモジュールを利用したデータベースアクセスを行う業務処理実行の為のコンテキストクラスです。<br>
13+ * アプリケーションで実行されるHibernate処理はこのコンテキストクラスが利用されます。<br>
14+ * </p>
15+ * <p>
1216 * 当クラスではHibernateを利用するトランザクションのコンテキストクラスにおける総称型の決定を行います。<br>
1317 * </p>
1418 *
--- develop/Phosphoresce_Java_Webcore/trunk/commons_util/org/phosphoresce/lib/commons/util/ReflectionUtil.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/commons_util/org/phosphoresce/lib/commons/util/ReflectionUtil.java (revision 398)
@@ -18,6 +18,7 @@
1818 * 更新日 更新者 更新内容
1919 * 2012/10/02 Kitagawa 新規作成
2020 * 2013/07/10 Kitagawa getInterfaces(Class<?>)追加
21+ * 2013/08/15 Kitagawa getSuperclasses(Class<?>)追加
2122 *-->
2223 */
2324 public class ReflectionUtil {
@@ -30,7 +31,7 @@
3031 }
3132
3233 /**
33- * 指定されたクラスインタフェースを親クラスまで再帰的に検索して取得します。<br>
34+ * 指定されたクラスのインタフェースを親クラスまで再帰的に検索して取得します。<br>
3435 * @param target ターゲットクラス
3536 * @return インタフェースリスト
3637 */
@@ -38,7 +39,12 @@
3839 List<Class<?>> list = new LinkedList<Class<?>>();
3940 for (Class<?> clazz = target; clazz != Object.class; clazz = clazz.getSuperclass()) {
4041 try {
41- list.addAll(Arrays.asList(clazz.getInterfaces()));
42+ //list.addAll(Arrays.asList(clazz.getInterfaces()));
43+ for (Class<?> i : Arrays.asList(clazz.getInterfaces())) {
44+ if (!list.contains(i)) {
45+ list.add(i);
46+ }
47+ }
4248 } catch (SecurityException ex) {
4349 }
4450 }
@@ -46,6 +52,24 @@
4652 }
4753
4854 /**
55+ * 指定されたクラスのスーパークラス情報を親クラスまで再帰的に検索して取得します。<br>
56+ * @param target ターゲットクラス
57+ * @return スーパークラスリスト
58+ */
59+ public static List<Class<?>> getSuperclasses(Class<?> target) {
60+ List<Class<?>> list = new LinkedList<Class<?>>();
61+ for (Class<?> clazz = target.getSuperclass(); clazz != null; clazz = clazz.getSuperclass()) {
62+ try {
63+ if (!list.contains(clazz)) {
64+ list.add(clazz);
65+ }
66+ } catch (SecurityException ex) {
67+ }
68+ }
69+ return list;
70+ }
71+
72+ /**
4973 * 指定されたクラスフィールドを親クラスまで再帰的に検索して取得します。<br>
5074 * @param target ターゲットクラス
5175 * @param name フィールド名
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperSingleWriter.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperSingleWriter.java (revision 398)
@@ -25,6 +25,7 @@
2525 * 更新日 更新者 更新内容
2626 * 2007/08/10 Kitagawa 新規作成
2727 * 2012/07/06 Kitagawa Webcoreフレームワーク用に新たなクラスとして新規作成
28+ * 2013/08/13 Kitagawa 帳票へのデータバインド時に環境依存文字をフィルタしてセットするように修正
2829 *-->
2930 */
3031 public class JasperSingleWriter extends JasperWriter {
@@ -70,7 +71,7 @@
7071 * @return データソースオブジェクト
7172 */
7273 private JRDataSource createJRDataSource() {
73- return new JRBeanCollectionDataSource(container.getRecords());
74+ return new JRBeanCollectionDataSource(container.getFilteredRecords());
7475 }
7576
7677 /**
@@ -81,9 +82,9 @@
8182 private JasperPrint createJasperPrint() throws JRException {
8283 JasperReport report = createJasperReport();
8384 if (report == null) {
84- return JasperFillManager.fillReport(jrxmlPath, container.getParameters(), createJRDataSource());
85+ return JasperFillManager.fillReport(jrxmlPath, container.getFilteredParameters(), createJRDataSource());
8586 } else {
86- return JasperFillManager.fillReport(report, container.getParameters(), createJRDataSource());
87+ return JasperFillManager.fillReport(report, container.getFilteredParameters(), createJRDataSource());
8788 }
8889 }
8990
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperContainer.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperContainer.java (revision 398)
@@ -35,6 +35,7 @@
3535 * 更新日 更新者 更新内容
3636 * 2007/08/10 Kitagawa 新規作成
3737 * 2012/07/06 Kitagawa Webcoreフレームワーク用に新たなクラスとして新規作成
38+ * 2013/08/13 Kitagawa 環境依存文字をフィルタしたパラメータを取得するインタフェースを追加
3839 *-->
3940 */
4041 public class JasperContainer implements Serializable {
@@ -133,6 +134,14 @@
133134 }
134135
135136 /**
137+ * 環境依存文字をフィルタしたパラメータマップオブジェクトを取得します。<br>
138+ * @return パラメータマップオブジェクト
139+ */
140+ public Map<String, Object> getFilteredParameters() {
141+ return JasperCharacterFilter.encode(parameter);
142+ }
143+
144+ /**
136145 * データソースレコードリストオブジェクトを取得します。<br>
137146 * @return データソースレコードリストオブジェクト
138147 */
@@ -141,6 +150,14 @@
141150 }
142151
143152 /**
153+ * 環境依存文字をフィルタしたデータソースレコードリストオブジェクトを取得します。<br>
154+ * @return データソースレコードリストオブジェクト
155+ */
156+ public List<Map<String, Object>> getFilteredRecords() {
157+ return JasperCharacterFilter.encode(datasource);
158+ }
159+
160+ /**
144161 * データソースレコード件数を取得します。<br>
145162 * @return データソースレコード件数
146163 */
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperCharacterFilter.java (nonexistent)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperCharacterFilter.java (revision 398)
@@ -0,0 +1,99 @@
1+package org.phosphoresce.webcore.ext.jasper.export;
2+
3+import java.util.HashMap;
4+import java.util.LinkedList;
5+import java.util.List;
6+import java.util.Map;
7+
8+import org.phosphoresce.lib.commons.util.StringUtil;
9+
10+/**
11+ * JasperReportsバインドパラメータ設定時に環境依存文字による例外発生を防止する為のフィルタインタフェースを提供します。<br>
12+ * <p>
13+ * バインドパラメータ又は、データソースにおいて環境依存文字が存在する場合、iTextライブラリにおいて例外が発生します。<br>
14+ * バインドデータ登録時に入力チェック等で制限がかかっていない場合に当クラスを介すことで強制的に
15+ * </p>
16+ *
17+ * @author Kitagawa<br>
18+ *
19+ *<!--
20+ * 更新日 更新者 更新内容
21+ * 2013/08/13 Kitagawa 新規作成
22+ *-->
23+ */
24+public class JasperCharacterFilter {
25+
26+ /** 環境依存代替文字 */
27+ public static String SUBSTITUDE_CHAR = "?";
28+
29+ /**
30+ * コンストラクタ<br>
31+ */
32+ private JasperCharacterFilter() {
33+ super();
34+ }
35+
36+ /**
37+ * 指定された文字列に環境依存文字が含まれる場合、代替文字に置き換えて提供します。<br>
38+ * @param value 対象文字列
39+ * @return 編集後文字列
40+ */
41+ public static String encode(String value) {
42+ StringBuffer buffer = new StringBuffer();
43+ for (int i = 0; i <= value.length() - 1; i++) {
44+ String test = new String(new char[] { value.charAt(i) });
45+ String etest = StringUtil.encode(test, "MS932");
46+ if ("?".equals(etest)) {
47+ buffer.append(SUBSTITUDE_CHAR);
48+ } else {
49+ buffer.append(value.charAt(i));
50+ }
51+ }
52+ return buffer.toString();
53+ }
54+
55+ /**
56+ * 指定されたマップ情報の値が文字列の場合で環境文字が含まれる場合、代替文字列に置き換えて提供します。<br>
57+ * 指定されたマップインスタンス自体の編集は行わずに、新たなマップインスタンスとして提供されます。<br>
58+ * @param data 対象マップオブジェクト
59+ * @return 編集後マップオブジェクト
60+ */
61+ public static Map<String, Object> encode(Map<String, Object> data) {
62+ if (data == null) {
63+ return null;
64+ }
65+ Map<String, Object> render = new HashMap<String, Object>();
66+ for (String key : data.keySet()) {
67+ Object value = data.get(key);
68+ if (value instanceof String) {
69+ render.put(key, encode((String) value));
70+ } else if (value instanceof String[]) {
71+ List<String> strings = new LinkedList<String>();
72+ for (String string : (String[]) value) {
73+ strings.add(encode(string));
74+ }
75+ render.put(key, strings.toArray(new String[0]));
76+ } else {
77+ render.put(key, value);
78+ }
79+ }
80+ return render;
81+ }
82+
83+ /**
84+ * 指定されたリスト情報の値が文字列の場合で環境文字が含まれる場合、代替文字列に置き換えて提供します。<br>
85+ * 指定されたリストインスタンス自体の編集は行わずに、新たなマップインスタンスとして提供されます。<br>
86+ * @param list 対象リストオブジェクト
87+ * @return 編集後リストオブジェクト
88+ */
89+ public static List<Map<String, Object>> encode(List<Map<String, Object>> list) {
90+ if (list == null) {
91+ return null;
92+ }
93+ List<Map<String, Object>> render = new LinkedList<Map<String, Object>>();
94+ for (Map<String, Object> data : list) {
95+ render.add(encode(data));
96+ }
97+ return render;
98+ }
99+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperMultipageWriter.java (revision 397)
+++ develop/Phosphoresce_Java_Webcore/trunk/webfw_jasper/org/phosphoresce/webcore/ext/jasper/export/JasperMultipageWriter.java (revision 398)
@@ -30,6 +30,7 @@
3030 * 更新日 更新者 更新内容
3131 * 2007/08/10 Kitagawa 新規作成
3232 * 2012/07/06 Kitagawa Webcoreフレームワーク用に新たなクラスとして新規作成
33+ * 2013/08/13 Kitagawa 帳票へのデータバインド時に環境依存文字をフィルタしてセットするように修正
3334 *-->
3435 */
3536 public class JasperMultipageWriter extends JasperWriter {
@@ -89,7 +90,7 @@
8990 private List<JRDataSource> createJRDataSource() {
9091 List<JRDataSource> list = new LinkedList<JRDataSource>();
9192 for (JasperContainer container : containers) {
92- list.add(new JRBeanCollectionDataSource(container.getRecords()));
93+ list.add(new JRBeanCollectionDataSource(container.getFilteredRecords()));
9394 }
9495 return list;
9596 }
@@ -106,9 +107,9 @@
106107 int count = 0;
107108 for (JasperReport report : reports) {
108109 if (report == null) {
109- list.add(JasperFillManager.fillReport(jrxmlPaths.get(count), containers.get(count).getParameters(), sources.get(count)));
110+ list.add(JasperFillManager.fillReport(jrxmlPaths.get(count), containers.get(count).getFilteredParameters(), sources.get(count)));
110111 } else {
111- list.add(JasperFillManager.fillReport(report, containers.get(count).getParameters(), sources.get(count)));
112+ list.add(JasperFillManager.fillReport(report, containers.get(count).getFilteredParameters(), sources.get(count)));
112113 }
113114 count++;
114115 }
Show on old repository browser