Revision 41902 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/DefaultInstallerManager.java

View differences:

DefaultInstallerManager.java
41 41
import java.util.List;
42 42
import java.util.Map;
43 43
import java.util.Set;
44
import org.apache.commons.io.FileUtils;
44 45
import org.apache.commons.lang3.StringUtils;
45 46

  
46 47
import org.gvsig.installer.lib.api.DependenciesCalculator;
......
67 68
import org.gvsig.tools.service.AbstractManager;
68 69
import org.gvsig.tools.service.Service;
69 70
import org.gvsig.tools.service.ServiceException;
71
import org.slf4j.Logger;
72
import org.slf4j.LoggerFactory;
70 73

  
71 74
/**
72 75
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera Llodr&aacute;</a>
......
74 77
public class DefaultInstallerManager extends AbstractManager implements
75 78
        InstallerManager {
76 79

  
80
    private static Logger logger = LoggerFactory.getLogger(DefaultInstallerManager.class);
81
            
77 82
    private static class LocalRepositoryLocation {
78 83

  
79 84
        private File location;
......
482 487
        return this.getDefaultLocalAddonRepository(packageType,ACCESS_READ);
483 488
    }
484 489

  
490
    private boolean canWrite(File f) {
491
        if( !f.canWrite() ) {
492
            return false;
493
        }
494
//        En MS Windows File.canWrite retorna true aunque luego no se pueden crear 
495
//        escribir en esa carpeta, asi que probamos a crear una carpeta para 
496
//        asegurarnos si se puede escribir realmente.
497
        File f2 = new File(f,"test.dir");
498
        if( f2.mkdir() ) {
499
            f2.delete();
500
            return true;
501
        }
502
        return false;
503
    }
504
    
485 505
    public File getDefaultLocalAddonRepository(String packageType, int access) {
486 506
        File f = this.defaultRepositoryLocation.get(packageType);
487 507
        switch(access) {
488 508
        case ACCESS_WRITE:
489
            if( f.canWrite() ) {
509
            if( canWrite(f) ) {
490 510
                return f;
491 511
            }
492 512
            break;
......
501 521
        for( File repositoryLocation : repositoriesLocaltions ) {
502 522
            switch(access) {
503 523
            case ACCESS_WRITE:
504
                if( repositoryLocation.canWrite() ) {
524
                if( canWrite(repositoryLocation) ) {
505 525
                    return repositoryLocation;
506 526
                }
507 527
                break;

Also available in: Unified diff