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
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