Revision 46277 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/JDBCResourcesStorage.java

View differences:

JDBCResourcesStorage.java
51 51
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_RESOURCES_NAME;
52 52
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_RESOURCES_RESOURCE;
53 53
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES_NAME;
54
import org.gvsig.fmap.dal.exception.InitializeException;
54 55
import org.gvsig.fmap.dal.feature.EditableFeature;
55 56
import org.gvsig.fmap.dal.feature.Feature;
56 57
import org.gvsig.fmap.dal.feature.FeatureStore;
57 58
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
59
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
60
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
61
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.RetrieveValueOperation;
58 62
import org.gvsig.tools.ToolsLocator;
59 63
import org.gvsig.tools.dispose.DisposeUtils;
60 64
import org.gvsig.tools.folders.FoldersManager;
......
72 76
public class JDBCResourcesStorage extends AbstractResourcesStorage {
73 77

  
74 78
    private static final Logger LOGGER = LoggerFactory.getLogger(JDBCResourcesStorage.class);
79
    private final JDBCHelper helper;
75 80

  
76 81
    private static class ExistsResourcesCache extends CachedValue<Map<String,Boolean>> {
77 82
        @Override
......
154 159
                return null;
155 160
            }
156 161
        }
162
        
163
        private byte[] retrieveResource() throws Exception {
164
            ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
165
            String filter = builder.eq(
166
                    builder.column(FIELD_RESOURCES_NAME),
167
                    builder.constant(this.getTableName() + "." + this.name)
168
            ).toString();
169
            OperationsFactory operations = this.storage.helper.getOperations();
170
            RetrieveValueOperation op = operations.createRetrieveValue(
171
                    operations.createTableReference(this.getStoreParameters()),
172
                    filter,
173
                    null, //order
174
                    FIELD_RESOURCES_RESOURCE
175
            );
176
            return (byte[] ) op.perform();
177
        }
178
        
179
        private byte[] retrieveResource0() throws Exception {
180
            FeatureStore store = null;
181
            try {
182
                DataManager dataManager = DALLocator.getDataManager();
183
                store = (FeatureStore) dataManager.openStore(
184
                        this.getStoreParameters().getDataStoreName(),
185
                        this.getStoreParameters()
186
                );
187
                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
188
                String filter = builder.eq(
189
                        builder.column(FIELD_RESOURCES_NAME),
190
                        builder.constant(this.getTableName() + "." + this.name)
191
                ).toString();
192
                Feature feature = store.findFirst(filter);
193
                if (feature == null) {
194
                    return null;
195
                }
196
                byte[] resource = feature.getByteArray(FIELD_RESOURCES_RESOURCE);                
197
                return resource;
198
            } finally {
199
                DisposeUtils.disposeQuietly(store);
200
            }
201
        }
157 202

  
158 203
        @Override
159 204
        public boolean exists() {
160
            FeatureStore store = null;
205
//            FeatureStore store = null;
161 206
            try {
162 207
                FoldersManager fm = ToolsLocator.getFoldersManager();
163 208
                Pair<String, String> key = this.getCacheID();
......
170 215
                if( f.exists() ) {
171 216
                  return true;
172 217
                }
173
                DataManager dataManager = DALLocator.getDataManager();
174
                store = (FeatureStore) dataManager.openStore(
175
                        this.getStoreParameters().getDataStoreName(),
176
                        this.getStoreParameters()
177
                );
178
                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
179
                String filter = builder.eq(
180
                        builder.column(FIELD_RESOURCES_NAME),
181
                        builder.constant(this.getTableName()+"."+this.name)
182
                ).toString();
183
                Feature feature = store.findFirst(filter);
184
                boolean exists = feature!=null;
218
//                DataManager dataManager = DALLocator.getDataManager();
219
//                store = (FeatureStore) dataManager.openStore(
220
//                        this.getStoreParameters().getDataStoreName(),
221
//                        this.getStoreParameters()
222
//                );
223
//                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
224
//                String filter = builder.eq(
225
//                        builder.column(FIELD_RESOURCES_NAME),
226
//                        builder.constant(this.getTableName()+"."+this.name)
227
//                ).toString();
228
//                Feature feature = store.findFirst(filter);
229
                byte[] resource = retrieveResource();
230
                boolean exists = resource!=null;
231
                if( resource!=null ) {
232
                    putResourceInCache(resource);
233
                }
185 234
                this.getExistsResourcesCache().put(key_s, exists);
186 235
                return exists;
187 236
            } catch (Throwable ex) {
188 237
                LOGGER.warn("Can't access to the resoure '" + this.getURL() + "'.", ex);
189
            } finally {
190
                DisposeUtils.disposeQuietly(store);
238
//            } finally {
239
//                DisposeUtils.disposeQuietly(store);
191 240
            }
192 241
            return false;
193 242
        }
......
289 338
          }
290 339
          return is;
291 340
        }
341

  
342
        private void putResourceInCache(byte[] resource) {
343
            FoldersManager fm = ToolsLocator.getFoldersManager();
344
            Pair<String, String> key = this.getCacheID();
345
            File f = fm.getTemporaryFile("resources-storage", "jdbc", key.getLeft(), key.getRight());
346
            FileOutputStream os = null;
347
            File f2 = null;
348
            try {
349
                FileUtils.forceMkdir(f.getParentFile());
350
                os = new FileOutputStream(f);
351
                IOUtils.write(resource, os);
352
                IOUtils.closeQuietly(os);
353

  
354
                f2 = fm.getTemporaryFile("resources-storage", "jdbc", key.getLeft(), "parameters");
355
                byte[] data = this.getStoreParameters().toByteArray();
356
                os = new FileOutputStream(f2);
357
                IOUtils.write(data, os);
358
            } catch (IOException ex) {
359
                FileUtils.deleteQuietly(f);
360
                FileUtils.deleteQuietly(f2);
361
            } finally {
362
                IOUtils.closeQuietly(os);
363
            }
364
        }
292 365
        
293 366
        private InputStream getInputStream() throws IOException {
294
            FeatureStore store = null;
367
//            FeatureStore store = null;
295 368
            try {
296
                DataManager dataManager = DALLocator.getDataManager();
297
                store = (FeatureStore) dataManager.openStore(
298
                        this.getStoreParameters().getDataStoreName(),
299
                        this.getStoreParameters()
300
                );
301
                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
302
                String filter = builder.eq(
303
                        builder.column(FIELD_RESOURCES_NAME),
304
                        builder.constant(this.getTableName()+"."+this.name)
305
                ).toString();
306
                Feature feature = store.findFirst(filter);
307
                if (feature == null) {
308
                    return null;
309
                }
310
                byte[] resource = feature.getByteArray(FIELD_RESOURCES_RESOURCE);
369
//                DataManager dataManager = DALLocator.getDataManager();
370
//                store = (FeatureStore) dataManager.openStore(
371
//                        this.getStoreParameters().getDataStoreName(),
372
//                        this.getStoreParameters()
373
//                );
374
//                ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
375
//                String filter = builder.eq(
376
//                        builder.column(FIELD_RESOURCES_NAME),
377
//                        builder.constant(this.getTableName()+"."+this.name)
378
//                ).toString();
379
//                Feature feature = store.findFirst(filter);
380
//                if (feature == null) {
381
//                    return null;
382
//                }
383
//                byte[] resource = feature.getByteArray(FIELD_RESOURCES_RESOURCE);
384
                byte[] resource = retrieveResource();
311 385
                InputStream is = new ByteArrayInputStream(resource);
312 386
                return is;
313 387
            } catch (Throwable ex) {
314 388
                LOGGER.warn("Can't access to the resoure '" + this.getURL() + "'.", ex);
315
            } finally {
316
                DisposeUtils.disposeQuietly(store);
389
//            } finally {
390
//                DisposeUtils.disposeQuietly(store);
317 391
            }
318 392
            return null;
319 393
        }
......
391 465
        }
392 466
    }
393 467

  
394
    private final ResourcesStorage alternativeStorge;
468
    private final ResourcesStorage alternativeStorage;
395 469
    private final JDBCStoreParameters resourcesStoreParameters;
396 470
    private final String tableName;
397 471
    private final boolean readonly;
398 472
    private final ExistsResourcesCache existsResourcesCache;
399 473

  
400 474
    public JDBCResourcesStorage(
401
                ResourcesStorage alternativeStorge, 
475
                JDBCHelper helper,
476
                ResourcesStorage alternativeStorage, 
402 477
                JDBCStoreParameters resourcesStoreParameters, 
403 478
                String tableName
404 479
        ) {
405
        this(alternativeStorge, resourcesStoreParameters, tableName, false);
480
        this(helper, alternativeStorage, resourcesStoreParameters, tableName, false);
406 481
    }
407 482

  
408 483
    public JDBCResourcesStorage(
409
                ResourcesStorage alternativeStorge, 
484
                JDBCHelper helper,
485
                ResourcesStorage alternativeStorage, 
410 486
                JDBCStoreParameters resourcesStoreParameters, 
411 487
                String tableName,
412 488
                boolean readonly
413 489
        ) {
490
        this.helper = helper;
414 491
        this.readonly = readonly;
415
        this.alternativeStorge = alternativeStorge;
492
        this.alternativeStorage = alternativeStorage;
416 493
        if( StringUtils.equals(TABLE_RESOURCES_NAME, tableName) ) {
417 494
            // No podemos buscar recursos de la tabla de recursos, ya que si no
418 495
            // al abrise la tabla de recursos entraria en bucle.
......
432 509

  
433 510
    @Override
434 511
    public Resource getResource(String name) {
435
        if( this.alternativeStorge!=null ) {
436
            Resource r = this.alternativeStorge.getResource(name);
512
        if( this.alternativeStorage!=null ) {
513
            Resource r = this.alternativeStorage.getResource(name);
437 514
            if( r.exists() ) {
438 515
                return r;
439 516
            }
......
449 526
        if (this.resourcesStoreParameters == null) {
450 527
            return null;
451 528
        }
452
        if( this.alternativeStorge!=null ) {
453
            List<Resource> r = this.alternativeStorge.getResources(name);
529
        if( this.alternativeStorage!=null ) {
530
            List<Resource> r = this.alternativeStorage.getResources(name);
454 531
            if( r!=null && !r.isEmpty() ) {
455 532
                return r;
456 533
            }
......
499 576

  
500 577
    @Override
501 578
    public boolean remove(String resourceName) {
502
        if( this.alternativeStorge!=null ) {
579
        if( this.alternativeStorage!=null ) {
503 580
            try {
504
                this.alternativeStorge.remove(resourceName);
581
                this.alternativeStorage.remove(resourceName);
505 582
            } catch (Exception e) {
506 583
                //Do nothing
507 584
            }

Also available in: Unified diff