IDEMPIERE-390 Attachments/archives on load balancer scenario / Implement archive part

This commit is contained in:
Juliana Corredor 2012-12-05 17:59:06 -05:00
parent 751f74cb46
commit 16cf4aee67
14 changed files with 825 additions and 31 deletions

View File

@ -0,0 +1,170 @@
-- Nov 30, 2012 5:06:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Element (ColumnName,AD_Element_ID,EntityType,Name,PrintName,AD_Element_UU,AD_Client_ID,Created,Updated,AD_Org_ID,CreatedBy,UpdatedBy,IsActive) VALUES ('StorageArchive',200257,'D','StorageArchive','Storage Archive','766f13f0-dd9f-4a36-8540-f9f990a81f25',0,TO_DATE('2012-11-30 17:06:06','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2012-11-30 17:06:06','YYYY-MM-DD HH24:MI:SS'),0,100,100,'Y')
;
-- Nov 30, 2012 5:06:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_Name,PO_PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Element_Trl_UU ) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_Name,t.PO_PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200257 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Element SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', PrintName='Storage Archive_ID',Updated=TO_DATE('2012-11-30 17:11:05','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=200257
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Element_Trl SET IsTranslated='N' WHERE AD_Element_ID=200257
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Column SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', Description=NULL, Help=NULL WHERE AD_Element_ID=200257
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Process_Para SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', Description=NULL, Help=NULL, AD_Element_ID=200257 WHERE UPPER(ColumnName)='STORAGEARCHIVE_ID' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Process_Para SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', Description=NULL, Help=NULL WHERE AD_Element_ID=200257 AND IsCentrallyMaintained='Y'
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET Name='StorageArchive_ID', Description=NULL, Help=NULL WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=200257) AND IsCentrallyMaintained='Y'
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_PrintFormatItem pi SET PrintName='Storage Archive_ID', Name='StorageArchive_ID' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=pi.AD_Column_ID AND c.AD_Element_ID=200257)
;
-- Nov 30, 2012 5:11:22 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,227,201007,'U','N','N','N',0,'N',22,'N',18,'N',200257,'N','Y','764723f1-4251-4153-8198-0615453fa358','Y','N','StorageArchive_ID','StorageArchive_ID','Y',TO_DATE('2012-11-30 17:11:21','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-30 17:11:21','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
;
-- Nov 30, 2012 5:11:22 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=201007 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
;
-- Nov 30, 2012 5:14:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE C_AcctProcessor SET DateNextRun=TO_DATE('2012-11-30 17:24:08','YYYY-MM-DD HH24:MI:SS'), DateLastRun=TO_DATE('2012-11-30 17:14:08','YYYY-MM-DD HH24:MI:SS'),Updated=TO_DATE('2012-11-30 17:14:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE C_AcctProcessor_ID=100
;
-- Nov 30, 2012 5:16:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Reference (AD_Reference_ID,Name,EntityType,AD_Reference_UU,IsOrderByValue,Description,ValidationType,AD_Client_ID,AD_Org_ID,CreatedBy,Updated,IsActive,Created,UpdatedBy) VALUES (200023,'AD_StorageProvider_ID','D','2dc5386f-d9db-4758-a03e-e8695a286ff2','N','AD_StorageProvider_ID','T',0,0,100,TO_DATE('2012-11-30 17:16:07','YYYY-MM-DD HH24:MI:SS'),'Y',TO_DATE('2012-11-30 17:16:07','YYYY-MM-DD HH24:MI:SS'),100)
;
-- Nov 30, 2012 5:16:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Reference_Trl (AD_Language,AD_Reference_ID, Help,Name,Description, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Reference_Trl_UU ) SELECT l.AD_Language,t.AD_Reference_ID, t.Help,t.Name,t.Description, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Reference t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Reference_ID=200023 AND NOT EXISTS (SELECT * FROM AD_Reference_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Reference_ID=t.AD_Reference_ID)
;
-- Nov 30, 2012 5:17:00 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Ref_Table (IsValueDisplayed,AD_Reference_ID,AD_Key,AD_Display,EntityType,AD_Table_ID,AD_Ref_Table_UU,CreatedBy,Updated,Created,AD_Client_ID,UpdatedBy,AD_Org_ID,IsActive) VALUES ('N',200023,200961,200969,'D',200037,'2d31b980-72b5-4c2e-964b-91fa288f0a12',100,TO_DATE('2012-11-30 17:17:00','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2012-11-30 17:17:00','YYYY-MM-DD HH24:MI:SS'),0,100,0,'Y')
;
-- Nov 30, 2012 5:17:57 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Column SET AD_Reference_Value_ID=200023,Updated=TO_DATE('2012-11-30 17:17:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=201007
;
-- Nov 30, 2012 5:18:10 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
ALTER TABLE AD_ClientInfo ADD StorageArchive_ID NUMBER(10) DEFAULT NULL
;
-- Nov 30, 2012 5:20:25 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Field (ColumnSpan,NumLines,SortNo,IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,SeqNo,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive,IsDisplayedGrid,SeqNoGrid,XPosition,IsQuickEntry) VALUES (1,1,0,'N',169,0,'N','N',201007,240,'Y',200949,'N','D','StorageArchive_ID','40744096-6d57-48e7-8931-6c237ee9ac3c','Y','N',100,0,TO_DATE('2012-11-30 17:20:24','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-30 17:20:24','YYYY-MM-DD HH24:MI:SS'),'Y','Y',320,1,'N')
;
-- Nov 30, 2012 5:20:25 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200949 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET ColumnSpan=2, SeqNo=120, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200949
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=130,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=9201
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=140,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1564
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=150,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1563
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=160,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1562
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=170,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1565
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=180,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1566
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=190,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1567
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=200,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10319
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=210,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10320
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=220,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=57531
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=230,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=57534
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=240,Updated=TO_DATE('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=57535
;
-- Nov 30, 2012 5:30:06 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Ref_Table SET IsValueDisplayed='Y', AD_Display=200961,Updated=TO_DATE('2012-11-30 17:30:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Reference_ID=200023
;
-- Nov 30, 2012 5:34:49 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Ref_Table SET IsValueDisplayed='N',Updated=TO_DATE('2012-11-30 17:34:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Reference_ID=200023
;

View File

@ -0,0 +1,170 @@
-- Nov 30, 2012 5:06:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Element (ColumnName,AD_Element_ID,EntityType,Name,PrintName,AD_Element_UU,AD_Client_ID,Created,Updated,AD_Org_ID,CreatedBy,UpdatedBy,IsActive) VALUES ('StorageArchive',200257,'D','StorageArchive','Storage Archive','766f13f0-dd9f-4a36-8540-f9f990a81f25',0,TO_TIMESTAMP('2012-11-30 17:06:06','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2012-11-30 17:06:06','YYYY-MM-DD HH24:MI:SS'),0,100,100,'Y')
;
-- Nov 30, 2012 5:06:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_Name,PO_PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Element_Trl_UU ) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_Name,t.PO_PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200257 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Element SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', PrintName='Storage Archive_ID',Updated=TO_TIMESTAMP('2012-11-30 17:11:05','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=200257
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Element_Trl SET IsTranslated='N' WHERE AD_Element_ID=200257
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Column SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', Description=NULL, Help=NULL WHERE AD_Element_ID=200257
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Process_Para SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', Description=NULL, Help=NULL, AD_Element_ID=200257 WHERE UPPER(ColumnName)='STORAGEARCHIVE_ID' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Process_Para SET ColumnName='StorageArchive_ID', Name='StorageArchive_ID', Description=NULL, Help=NULL WHERE AD_Element_ID=200257 AND IsCentrallyMaintained='Y'
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET Name='StorageArchive_ID', Description=NULL, Help=NULL WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=200257) AND IsCentrallyMaintained='Y'
;
-- Nov 30, 2012 5:11:05 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_PrintFormatItem SET PrintName='Storage Archive_ID', Name='StorageArchive_ID' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=AD_PrintFormatItem.AD_Column_ID AND c.AD_Element_ID=200257)
;
-- Nov 30, 2012 5:11:22 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,227,201007,'U','N','N','N',0,'N',22,'N',18,'N',200257,'N','Y','764723f1-4251-4153-8198-0615453fa358','Y','N','StorageArchive_ID','StorageArchive_ID','Y',TO_TIMESTAMP('2012-11-30 17:11:21','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-30 17:11:21','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
;
-- Nov 30, 2012 5:11:22 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=201007 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
;
-- Nov 30, 2012 5:14:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE C_AcctProcessor SET DateNextRun=TO_TIMESTAMP('2012-11-30 17:24:08','YYYY-MM-DD HH24:MI:SS'), DateLastRun=TO_TIMESTAMP('2012-11-30 17:14:08','YYYY-MM-DD HH24:MI:SS'),Updated=TO_TIMESTAMP('2012-11-30 17:14:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE C_AcctProcessor_ID=100
;
-- Nov 30, 2012 5:16:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Reference (AD_Reference_ID,Name,EntityType,AD_Reference_UU,IsOrderByValue,Description,ValidationType,AD_Client_ID,AD_Org_ID,CreatedBy,Updated,IsActive,Created,UpdatedBy) VALUES (200023,'AD_StorageProvider_ID','D','2dc5386f-d9db-4758-a03e-e8695a286ff2','N','AD_StorageProvider_ID','T',0,0,100,TO_TIMESTAMP('2012-11-30 17:16:07','YYYY-MM-DD HH24:MI:SS'),'Y',TO_TIMESTAMP('2012-11-30 17:16:07','YYYY-MM-DD HH24:MI:SS'),100)
;
-- Nov 30, 2012 5:16:08 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Reference_Trl (AD_Language,AD_Reference_ID, Help,Name,Description, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Reference_Trl_UU ) SELECT l.AD_Language,t.AD_Reference_ID, t.Help,t.Name,t.Description, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Reference t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Reference_ID=200023 AND NOT EXISTS (SELECT * FROM AD_Reference_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Reference_ID=t.AD_Reference_ID)
;
-- Nov 30, 2012 5:17:00 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Ref_Table (IsValueDisplayed,AD_Reference_ID,AD_Key,AD_Display,EntityType,AD_Table_ID,AD_Ref_Table_UU,CreatedBy,Updated,Created,AD_Client_ID,UpdatedBy,AD_Org_ID,IsActive) VALUES ('N',200023,200961,200969,'D',200037,'2d31b980-72b5-4c2e-964b-91fa288f0a12',100,TO_TIMESTAMP('2012-11-30 17:17:00','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2012-11-30 17:17:00','YYYY-MM-DD HH24:MI:SS'),0,100,0,'Y')
;
-- Nov 30, 2012 5:17:57 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Column SET AD_Reference_Value_ID=200023,Updated=TO_TIMESTAMP('2012-11-30 17:17:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=201007
;
-- Nov 30, 2012 5:18:10 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
ALTER TABLE AD_ClientInfo ADD COLUMN StorageArchive_ID NUMERIC(10) DEFAULT NULL
;
-- Nov 30, 2012 5:20:25 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Field (ColumnSpan,NumLines,SortNo,IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,SeqNo,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive,IsDisplayedGrid,SeqNoGrid,XPosition,IsQuickEntry) VALUES (1,1,0,'N',169,0,'N','N',201007,240,'Y',200949,'N','D','StorageArchive_ID','40744096-6d57-48e7-8931-6c237ee9ac3c','Y','N',100,0,TO_TIMESTAMP('2012-11-30 17:20:24','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-30 17:20:24','YYYY-MM-DD HH24:MI:SS'),'Y','Y',320,1,'N')
;
-- Nov 30, 2012 5:20:25 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200949 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET ColumnSpan=2, SeqNo=120, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200949
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=9201
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1564
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=150,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1563
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=160,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1562
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=170,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1565
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=180,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1566
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=190,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1567
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=200,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10319
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=210,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10320
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=220,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=57531
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=230,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=57534
;
-- Nov 30, 2012 5:20:54 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Field SET SeqNo=240,Updated=TO_TIMESTAMP('2012-11-30 17:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=57535
;
-- Nov 30, 2012 5:30:06 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Ref_Table SET IsValueDisplayed='Y', AD_Display=200961,Updated=TO_TIMESTAMP('2012-11-30 17:30:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Reference_ID=200023
;
-- Nov 30, 2012 5:34:49 PM COT
-- IDEMPIERE-390 Attachments/archives on load balancer scenario
UPDATE AD_Ref_Table SET IsValueDisplayed='N',Updated=TO_TIMESTAMP('2012-11-30 17:34:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Reference_ID=200023
;

View File

@ -291,6 +291,6 @@ Import-Package: com.sun.mail.auth;version="1.4.5",
Eclipse-BuddyPolicy: registered
Eclipse-ExtensibleAPI: true
Bundle-Activator: org.adempiere.base.BaseActivator
Service-Component: OSGI-INF/eventmanager.xml, OSGI-INF/dslocator.xml, OSGI-INF/extensionlocator.xml, OSGI-INF/serverbean.xml, OSGI-INF/statusbean.xml, OSGI-INF/defaultmodelfactory.xml, OSGI-INF/defaultdocfactory.xml, OSGI-INF/AttachmentFile.xml, OSGI-INF/AttachmentDB.xml
Service-Component: OSGI-INF/eventmanager.xml, OSGI-INF/dslocator.xml, OSGI-INF/extensionlocator.xml, OSGI-INF/serverbean.xml, OSGI-INF/statusbean.xml, OSGI-INF/defaultmodelfactory.xml, OSGI-INF/defaultdocfactory.xml, OSGI-INF/attachmentfile.xml, OSGI-INF/attachmentDB.xml,OSGI-INF/archiveDB.xml,OSGI-INF/archivefile.xml
Bundle-ActivationPolicy: lazy
Require-Bundle: org.eclipse.equinox.app;bundle-version="1.3.1"

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.archive.store.archiveDB">
<implementation class="org.compiere.model.ArchiveDB"/>
<property name="storage" type="String" value="DB"/>
<service>
<provide interface="org.compiere.model.IArchiveStore"/>
</service>
</scr:component>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.archive.store.archivefile">
<implementation class="org.compiere.model.ArchiveFileSystem"/>
<property name="storage" type="String" value="FileSystem"/>
<service>
<provide interface="org.compiere.model.IArchiveStore"/>
</service>
</scr:component>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.AttachmentDB">
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.attachment.store.attachmentDB">
<implementation class="org.compiere.model.AttachmentDBSystem"/>
<service>
<provide interface="org.compiere.model.IAttachmentStore"/>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.AttachmentFile">
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.attachment.store.attachmentfile">
<implementation class="org.compiere.model.AttachmentFileSystem"/>
<service>
<provide interface="org.compiere.model.IAttachmentStore"/>

View File

@ -0,0 +1,117 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2012 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.compiere.model;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.logging.Level;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.compiere.util.CLogger;
/**
* @author juliana
*
*/
public class ArchiveDB implements IArchiveStore {
private final CLogger log = CLogger.getCLogger(getClass());
/* (non-Javadoc)
* @see org.compiere.model.IArchiveStore#loadLOBData(org.compiere.model.MArchive, org.compiere.model.MStorageProvider)
*/
@Override
public byte[] loadLOBData(MArchive archive, MStorageProvider prov) {
byte[] deflatedData = archive.getByteData();
archive.m_deflated = null;
archive.m_inflated = null;
if (deflatedData == null)
return null;
//
log.fine("ZipSize=" + deflatedData.length);
archive.m_deflated = new Integer(deflatedData.length);
if (deflatedData.length == 0)
return null;
byte[] inflatedData = null;
try {
ByteArrayInputStream in = new ByteArrayInputStream(deflatedData);
ZipInputStream zip = new ZipInputStream(in);
ZipEntry entry = zip.getNextEntry();
if (entry != null) // just one entry
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int length = zip.read(buffer);
while (length != -1) {
out.write(buffer, 0, length);
length = zip.read(buffer);
}
//
inflatedData = out.toByteArray();
log.fine("Size=" + inflatedData.length + " - zip=" + entry.getCompressedSize()
+ "(" + entry.getSize() + ") "
+ (entry.getCompressedSize() * 100 / entry.getSize()) + "%");
archive.m_inflated = new Integer(inflatedData.length);
}
} catch (Exception e) {
log.log(Level.SEVERE, "", e);
inflatedData = null;
}
return inflatedData;
}
/* (non-Javadoc)
* @see org.compiere.model.IArchiveStore#save(org.compiere.model.MArchive, org.compiere.model.MStorageProvider, byte[])
*/
@Override
public void save(MArchive archive, MStorageProvider prov,byte[] inflatedData) {
if (inflatedData == null || inflatedData.length == 0)
throw new IllegalArgumentException("InflatedData is NULL");
archive.m_inflated = new Integer(inflatedData.length);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(out);
zip.setMethod(ZipOutputStream.DEFLATED);
zip.setLevel(Deflater.BEST_COMPRESSION);
zip.setComment("idempiere");
//
byte[] deflatedData = null;
try {
ZipEntry entry = new ZipEntry("IdempiereArchive");
entry.setTime(System.currentTimeMillis());
entry.setMethod(ZipEntry.DEFLATED);
zip.putNextEntry(entry);
zip.write(inflatedData, 0, inflatedData.length);
zip.closeEntry();
log.fine(entry.getCompressedSize() + " (" + entry.getSize() + ") "
+ (entry.getCompressedSize() * 100 / entry.getSize()) + "%");
//
// zip.finish();
zip.close();
deflatedData = out.toByteArray();
log.fine("Length=" + inflatedData.length);
archive.m_deflated = new Integer(deflatedData.length);
} catch (Exception e) {
log.log(Level.SEVERE, "saveLOBData", e);
deflatedData = null;
archive.m_deflated = null;
}
archive.setByteData(deflatedData);
}
}

View File

@ -0,0 +1,216 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2012 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.compiere.model;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.compiere.util.CLogger;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.w3c.dom.Element;
/**
* @author juliana
*
*/
public class ArchiveFileSystem implements IArchiveStore {
private String ARCHIVE_FOLDER_PLACEHOLDER = "%ARCHIVE_FOLDER%";
private final CLogger log = CLogger.getCLogger(getClass());
/* (non-Javadoc)
* @see org.compiere.model.IArchiveStore#loadLOBData(org.compiere.model.MArchive, org.compiere.model.MStorageProvider)
*/
@Override
public byte[] loadLOBData(MArchive archive, MStorageProvider prov) {
if ("".equals(archive.m_archivePathRoot)) {
throw new IllegalArgumentException("no attachmentPath defined");
}
byte[] data = archive.getByteData();
archive.m_deflated = null;
archive.m_inflated = null;
if (data == null) {
return null;
}
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
final DocumentBuilder builder = factory.newDocumentBuilder();
final Document document = builder.parse(new ByteArrayInputStream(data));
final NodeList entries = document.getElementsByTagName("entry");
if(entries.getLength()!=1){
log.severe("no archive entry found");
}
final Node entryNode = entries.item(0);
final NamedNodeMap attributes = entryNode.getAttributes();
final Node fileNode = attributes.getNamedItem("file");
if(fileNode==null ){
log.severe("no filename for entry");
return null;
}
String filePath = fileNode.getNodeValue();
log.fine("filePath: " + filePath);
if(filePath!=null){
filePath = filePath.replaceFirst(ARCHIVE_FOLDER_PLACEHOLDER, archive.m_archivePathRoot.replaceAll("\\\\","\\\\\\\\"));
//just to be shure...
String replaceSeparator = File.separator;
if(!replaceSeparator.equals("/")){
replaceSeparator = "\\\\";
}
filePath = filePath.replaceAll("/", replaceSeparator);
filePath = filePath.replaceAll("\\\\", replaceSeparator);
}
log.fine("filePath: " + filePath);
final File file = new File(filePath);
if (file.exists()) {
// read files into byte[]
final byte[] dataEntry = new byte[(int) file.length()];
try {
final FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(dataEntry);
fileInputStream.close();
} catch (FileNotFoundException e) {
log.severe("File Not Found.");
e.printStackTrace();
} catch (IOException e1) {
log.severe("Error Reading The File.");
e1.printStackTrace();
}
return dataEntry;
} else {
log.severe("file not found: " + file.getAbsolutePath());
return null;
}
} catch (SAXException sxe) {
// Error generated during parsing)
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
x.printStackTrace();
log.severe(x.getMessage());
} catch (ParserConfigurationException pce) {
// Parser with specified options can't be built
pce.printStackTrace();
log.severe(pce.getMessage());
} catch (IOException ioe) {
// I/O error
ioe.printStackTrace();
log.severe(ioe.getMessage());
}
return null;
}
/* (non-Javadoc)
* @see org.compiere.model.IArchiveStore#save(org.compiere.model.MArchive, org.compiere.model.MStorageProvider)
*/
@Override
public void save(MArchive archive, MStorageProvider prov,byte[] inflatedData) {
if ("".equals(archive.m_archivePathRoot)) {
throw new IllegalArgumentException("no attachmentPath defined");
}
if (inflatedData == null || inflatedData.length == 0) {
throw new IllegalArgumentException("InflatedData is NULL");
}
if(archive.get_ID()==0){
//set binary data otherwise save will fail
archive.setByteData(new byte[]{'0'});
if(!archive.save()) {
throw new IllegalArgumentException("unable to save MArchive");
}
}
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
BufferedOutputStream out = null;
try {
// create destination folder
StringBuilder msgfile = new StringBuilder().append(archive.m_archivePathRoot).append(File.separator)
.append(archive.getArchivePathSnippet());
final File destFolder = new File(msgfile.toString());
if (!destFolder.exists()) {
if (!destFolder.mkdirs()) {
log.warning("unable to create folder: " + destFolder.getPath());
}
}
// write to pdf
msgfile = new StringBuilder().append(archive.m_archivePathRoot).append(File.separator)
.append(archive.getArchivePathSnippet()).append(archive.get_ID()).append(".pdf");
final File destFile = new File(msgfile.toString());
out = new BufferedOutputStream(new FileOutputStream(destFile));
out.write(inflatedData);
out.flush();
//create xml entry
final DocumentBuilder builder = factory.newDocumentBuilder();
final Document document = builder.newDocument();
final Element root = document.createElement("archive");
document.appendChild(root);
document.setXmlStandalone(true);
final Element entry = document.createElement("entry");
StringBuilder msgsat = new StringBuilder(ARCHIVE_FOLDER_PLACEHOLDER).append(archive.getArchivePathSnippet()).append(archive.get_ID()).append(".pdf");
entry.setAttribute("file", msgsat.toString());
root.appendChild(entry);
final Source source = new DOMSource(document);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final Result result = new StreamResult(bos);
final Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);
final byte[] xmlData = bos.toByteArray();
log.fine(bos.toString());
//store xml in db
archive.setByteData(xmlData);
} catch (Exception e) {
log.log(Level.SEVERE, "saveLOBData", e);
archive.m_deflated = null;
archive.setByteData(null);
} finally {
if(out != null){
try {
out.close();
} catch (Exception e) { }
}
}
}
}

View File

@ -0,0 +1,23 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2012 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.compiere.model;
public interface IArchiveStore {
public byte[] loadLOBData(MArchive archive,MStorageProvider prov);
public void save(MArchive archive, MStorageProvider prov,byte[] inflatedData);
}

View File

@ -74,10 +74,10 @@ public interface I_AD_ClientInfo
/** Column name AD_StorageProvider_ID */
public static final String COLUMNNAME_AD_StorageProvider_ID = "AD_StorageProvider_ID";
/** Set AD_StorageProvider_ID */
/** Set Storage Provider */
public void setAD_StorageProvider_ID (int AD_StorageProvider_ID);
/** Get AD_StorageProvider_ID */
/** Get Storage Provider */
public int getAD_StorageProvider_ID();
public org.compiere.model.I_AD_StorageProvider getAD_StorageProvider() throws RuntimeException;
@ -400,6 +400,17 @@ public interface I_AD_ClientInfo
public org.compiere.model.I_M_Product getM_ProductFreight() throws RuntimeException;
/** Column name StorageArchive_ID */
public static final String COLUMNNAME_StorageArchive_ID = "StorageArchive_ID";
/** Set StorageArchive_ID */
public void setStorageArchive_ID (int StorageArchive_ID);
/** Get StorageArchive_ID */
public int getStorageArchive_ID();
public org.compiere.model.I_AD_StorageProvider getStorageArchive() throws RuntimeException;
/** Column name Updated */
public static final String COLUMNNAME_Updated = "Updated";

View File

@ -116,9 +116,9 @@ public class MArchive extends X_AD_Archive {
/** Logger */
private static CLogger s_log = CLogger.getCLogger(MArchive.class);
private Integer m_inflated = null;
public Integer m_inflated = null;
private Integer m_deflated = null;
public Integer m_deflated = null;
/***************************************************************************
* Standard Constructor
@ -176,7 +176,7 @@ public class MArchive extends X_AD_Archive {
private boolean isStoreArchiveOnFileSystem = false;
/** archive (root) path - if file system is used */
private String m_archivePathRoot = "";
public String m_archivePathRoot = "";
/**
* string replaces the archive root in stored xml file to allow the
@ -184,6 +184,7 @@ public class MArchive extends X_AD_Archive {
*/
private final String ARCHIVE_FOLDER_PLACEHOLDER = "%ARCHIVE_FOLDER%";
public MStorageProvider provider;
/**
* Get the isStoreArchiveOnFileSystem and archivePath for the client.
*
@ -191,7 +192,22 @@ public class MArchive extends X_AD_Archive {
* @param trxName
*/
private void initArchiveStoreDetails(Properties ctx, String trxName) {
final MClient client = new MClient(ctx, this.getAD_Client_ID(), trxName);
MClientInfo clientInfo = MClientInfo.get(ctx);
provider=new MStorageProvider(ctx, clientInfo.getStorageArchive_ID(), trxName);
m_archivePathRoot=provider.getFolder();
if(m_archivePathRoot == null){
log.severe("no attachmentPath defined");
} else if (!m_archivePathRoot.endsWith(File.separator)) {
log.warning("archive path doesn't end with " + File.separator);
m_archivePathRoot = m_archivePathRoot + File.separator;
log.fine(m_archivePathRoot);
}
/*final MClient client = new MClient(ctx, this.getAD_Client_ID(), trxName);
isStoreArchiveOnFileSystem = client.isStoreArchiveOnFileSystem();
if (isStoreArchiveOnFileSystem) {
if (File.separatorChar == '\\') {
@ -206,7 +222,7 @@ public class MArchive extends X_AD_Archive {
m_archivePathRoot = m_archivePathRoot + File.separator;
log.fine(m_archivePathRoot);
}
}
}*/
}
/**
@ -226,12 +242,13 @@ public class MArchive extends X_AD_Archive {
} // toString
public byte[] getBinaryData() {
if (isStoreArchiveOnFileSystem) {
return getBinaryDataFromFileSystem();
}
return getBinaryDataFromDB();
IArchiveStore prov = provider.getArchiveStore();
if (prov != null)
return prov.loadLOBData(this,provider);
return null;
}
/**
* @return attachment data
*/
@ -381,11 +398,17 @@ public class MArchive extends X_AD_Archive {
* inflated data
*/
public void setBinaryData(byte[] inflatedData) {
if (isStoreArchiveOnFileSystem) {
IArchiveStore prov = provider.getArchiveStore();
if (prov != null)
prov.save(this,provider,inflatedData);
/*if (isStoreArchiveOnFileSystem) {
saveBinaryDataIntoFileSystem(inflatedData);
} else {
saveBinaryDataIntoDB(inflatedData);
}
}*/
}
/**
@ -540,7 +563,7 @@ public class MArchive extends X_AD_Archive {
*
* @return String
*/
private String getArchivePathSnippet() {
public String getArchivePathSnippet() {
StringBuilder path = new StringBuilder().append(this.getAD_Client_ID()).append(File.separator).append(this.getAD_Org_ID())
.append(File.separator);
if (this.getAD_Process_ID() > 0) {
@ -563,7 +586,7 @@ public class MArchive extends X_AD_Archive {
* new
* @return true if can be saved
*/
protected boolean beforeSave(boolean newRecord) {
/*protected boolean beforeSave(boolean newRecord) {
// Binary Data is Mandatory
byte[] data = super.getBinaryData();
if (data == null || data.length == 0)
@ -571,6 +594,15 @@ public class MArchive extends X_AD_Archive {
//
log.fine(toString());
return true;
} // beforeSave
} // beforeSave*/
public byte[] getByteData(){
return super.getBinaryData();
}
public void setByteData(byte[] BinaryData){
super.setBinaryData(BinaryData);
}
} // MArchive

View File

@ -45,16 +45,30 @@ public class MStorageProvider extends X_AD_StorageProvider {
if (method == null)
method = "DB";
query.put("method", method);
List<IAttachmentStore> storelist = Service.locator().list(IAttachmentStore.class, query).getServices();
IAttachmentStore store = null;
if (storelist == null) {
IAttachmentStore store = Service.locator().locate(IAttachmentStore.class, query).getService();
if(store == null){
log.saveError("Error", "No storage provider found");
} else {
store = storelist.get(0);
}
return store;
}
public IArchiveStore getArchiveStore(){
ServiceQuery query=new ServiceQuery();
String method = this.getMethod();
if (method == null)
method = "DB";
query.put("storage", method);
IArchiveStore store = Service.locator().locate(IArchiveStore.class, query).getService();
if(store == null){
log.saveError("Error", "No storage provider found");
}
return store;
}
}

View File

@ -29,7 +29,7 @@ public class X_AD_ClientInfo extends PO implements I_AD_ClientInfo, I_Persistent
/**
*
*/
private static final long serialVersionUID = 20121127L;
private static final long serialVersionUID = 20121205L;
/** Standard Constructor */
public X_AD_ClientInfo (Properties ctx, int AD_ClientInfo_ID, String trxName)
@ -88,8 +88,8 @@ public class X_AD_ClientInfo extends PO implements I_AD_ClientInfo, I_Persistent
return (org.compiere.model.I_AD_StorageProvider)MTable.get(getCtx(), org.compiere.model.I_AD_StorageProvider.Table_Name)
.getPO(getAD_StorageProvider_ID(), get_TrxName()); }
/** Set AD_StorageProvider_ID.
@param AD_StorageProvider_ID AD_StorageProvider_ID */
/** Set Storage Provider.
@param AD_StorageProvider_ID Storage Provider */
public void setAD_StorageProvider_ID (int AD_StorageProvider_ID)
{
if (AD_StorageProvider_ID < 1)
@ -98,8 +98,8 @@ public class X_AD_ClientInfo extends PO implements I_AD_ClientInfo, I_Persistent
set_Value (COLUMNNAME_AD_StorageProvider_ID, Integer.valueOf(AD_StorageProvider_ID));
}
/** Get AD_StorageProvider_ID.
@return AD_StorageProvider_ID */
/** Get Storage Provider.
@return Storage Provider */
public int getAD_StorageProvider_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_AD_StorageProvider_ID);
@ -656,4 +656,29 @@ public class X_AD_ClientInfo extends PO implements I_AD_ClientInfo, I_Persistent
return 0;
return ii.intValue();
}
public org.compiere.model.I_AD_StorageProvider getStorageArchive() throws RuntimeException
{
return (org.compiere.model.I_AD_StorageProvider)MTable.get(getCtx(), org.compiere.model.I_AD_StorageProvider.Table_Name)
.getPO(getStorageArchive_ID(), get_TrxName()); }
/** Set StorageArchive_ID.
@param StorageArchive_ID StorageArchive_ID */
public void setStorageArchive_ID (int StorageArchive_ID)
{
if (StorageArchive_ID < 1)
set_Value (COLUMNNAME_StorageArchive_ID, null);
else
set_Value (COLUMNNAME_StorageArchive_ID, Integer.valueOf(StorageArchive_ID));
}
/** Get StorageArchive_ID.
@return StorageArchive_ID */
public int getStorageArchive_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_StorageArchive_ID);
if (ii == null)
return 0;
return ii.intValue();
}
}