/* Copyright (c) 2012-2014 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Gabriel Roldan (Boundless) - initial implementation */ package org.locationtech.geogig.api; import static com.google.common.base.Preconditions.checkArgument; import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.TimeZone; import org.locationtech.geogig.api.plumbing.ResolveGeogigDir; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; /** * Standard platform for GeoGig. */ public class DefaultPlatform implements Platform { protected File workingDir; /** * @return the working directory */ @Override public File pwd() { if (workingDir != null) { return workingDir; } return new File(".").getAbsoluteFile().getParentFile(); } /** * @param workingDir the working directory to use * @throws IllegalArgumentException if {@code workingDir} does not exist or is not a directory */ @Override public void setWorkingDir(File workingDir) { checkArgument(workingDir == null || workingDir.isDirectory(), "file does not exist or is not a directory: " + workingDir); this.workingDir = workingDir; } /** * @see Platform#whoami() */ @Override public String whoami() { return System.getProperty("user.name", "nobody"); } /** * @return the current time in milliseconds * @see org.locationtech.geogig.api.Platform#currentTimeMillis() */ @Override public long currentTimeMillis() { return System.currentTimeMillis(); } /** * @return the user home directory */ @Override public File getUserHome() { return new File(System.getProperty("user.home")); } @Override public int timeZoneOffset(long timeStamp) { return TimeZone.getDefault().getOffset(timeStamp); } @Override public long nanoTime() { return System.nanoTime(); } @Override public File getTempDir() { Optional<URL> url = new ResolveGeogigDir(this).call(); final File tmpDir; if (url.isPresent()) { try { URI uri = url.get().toURI(); tmpDir = new File(new File(uri), "tmp"); Preconditions.checkState(tmpDir.exists() || tmpDir.mkdir(), "unable to create directory %s", tmpDir.getAbsolutePath()); } catch (URISyntaxException e) { throw Throwables.propagate(e); } } else { String systmplocation = System.getProperty("java.io.tmpdir"); tmpDir = new File(systmplocation); } return tmpDir; } @Override public int availableProcessors() { return Runtime.getRuntime().availableProcessors(); } }