/*******************************************************************************
* Copyright (c) 2010 Philipp Kursawe.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Philipp Kursawe (phil.kursawe@gmail.com) - initial API and implementation
******************************************************************************/
package copyto.core.models;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.UUID;
import org.apache.commons.codec.binary.Base64;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.osgi.service.prefs.Preferences;
import copyto.core.Target;
import copyto.core.TargetFactory;
public abstract class AbstractTargetModel extends AbstractModel implements
Target, Serializable {
private static final long serialVersionUID = -395321611927968738L;
private transient final TargetFactory targetFactory;
public AbstractTargetModel(TargetFactory targetFactory) {
id = UUID.randomUUID().toString();
name = "unnamed"; //$NON-NLS-1$
this.targetFactory = targetFactory;
}
public void load(final Preferences preferences) {
setName(preferences.get("label", getName()));
}
/**
* @param preferences
*/
public void save(final Preferences preferences) {
preferences.put("label", name); //$NON-NLS-1$
}
/**
* @return BASE64 encoded string
*/
public String toBase64() {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream outputStream;
try {
outputStream = new ObjectOutputStream(out);
outputStream.writeObject(this);
return new String(Base64.encodeBase64(out.toByteArray()));
} catch (final IOException e) {
e.printStackTrace();
}
return null;
}
/**
* @param base64Encoding
* @return target
* @throws Exception
*/
public static AbstractTargetModel valueOf(final String base64Encoding)
throws Exception {
final Object target = new ObjectInputStream(new ByteArrayInputStream(
Base64.decodeBase64(base64Encoding.getBytes()))).readObject();
if (target instanceof AbstractTargetModel) {
((AbstractTargetModel) target).id = UUID.randomUUID().toString();
return (AbstractTargetModel) target;
}
return null;
}
private String id;
private String name;
private transient IStatus connectionStatus = new Status(IStatus.OK, "test", //$NON-NLS-1$
"Not tested yet"); //$NON-NLS-1$
/**
* @return id
*/
public String getId() {
return id;
}
/**
* @return name
*/
public String getName() {
return name;
}
/**
* @param name
*/
public void setName(final String name) {
pcs.firePropertyChange("name", this.name, //$NON-NLS-1$
this.name = name);
}
// From JavadocConfigurationBlock
private boolean checkURLConnection(URL url) {
int res = 0;
URLConnection connection = null;
try {
connection = url.openConnection();
if (connection instanceof HttpURLConnection) {
connection.connect();
res = ((HttpURLConnection) connection).getResponseCode();
}
InputStream is = null;
try {
is = connection.getInputStream();
byte[] buffer = new byte[256];
while (is.read(buffer) != -1) {
}
} finally {
if (is != null)
is.close();
}
} catch (IllegalArgumentException e) {
return false; // workaround for bug 91072
} catch (NullPointerException e) {
return false; // workaround for
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6536522
} catch (IOException e) {
return false;
}
return res < 400;
}
@Override
public String toString() {
return getName();
}
/**
* @param connectionStatus
*/
public void setConnectionStatus(final IStatus connectionStatus) {
this.connectionStatus = connectionStatus;
}
/**
* @return status
*/
public IStatus getConnectionStatus() {
return connectionStatus;
}
public TargetFactory getFactory() {
return targetFactory;
}
}