1
/*******************************************************************************
2
* Copyright (c) 2008, 2009 Andrew Gvozdev.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
10
*******************************************************************************/
12
package org.eclipse.cdt.make.internal.ui.dnd;
14
import java.io.ByteArrayInputStream;
15
import java.io.ByteArrayOutputStream;
16
import java.io.DataInputStream;
17
import java.io.DataOutputStream;
18
import java.io.IOException;
20
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
21
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferData.MakeTargetData;
22
import org.eclipse.swt.dnd.ByteArrayTransfer;
23
import org.eclipse.swt.dnd.Transfer;
24
import org.eclipse.swt.dnd.TransferData;
27
* This class can be used to transfer an instance of
28
* {@link MakeTargetTransferData} between two parts in a workbench in a drag and
29
* drop or clipboard copy/paste operation.
31
* @see ByteArrayTransfer
33
* @see org.eclipse.swt.dnd.DropTarget
34
* @see org.eclipse.swt.dnd.DragSource
36
public class MakeTargetTransfer extends ByteArrayTransfer {
38
private static final String TYPE_NAME = "make-target-transfer-format";//$NON-NLS-1$
40
private static final int TYPEID = registerType(TYPE_NAME);
45
private static MakeTargetTransfer instance = new MakeTargetTransfer();
48
* Creates a new transfer object.
50
private MakeTargetTransfer() {
55
* @return the singleton instance.
57
public static MakeTargetTransfer getInstance() {
62
* @return ids of the data types that can be converted using this transfer
65
* @see Transfer#getTypeIds()
68
protected int[] getTypeIds() {
69
return new int[] { TYPEID };
73
* @return the list of type names that can be converted using this transfer
76
* @see Transfer#getTypeNames()
79
protected String[] getTypeNames() {
80
return new String[] { TYPE_NAME };
84
* Converts a java representation of data to a platform specific
85
* representation of the data.
87
* @param object - a java representation of the data to be converted.
88
* @param transferData - an empty TransferData object; this object will be
89
* filled in on return with the platform specific representation of
92
* @exception org.eclipse.swt.SWTException {@code ERROR_INVALID_DATA} - if
93
* object doesn't contain data in a valid format or {@code null}.
95
* @see Transfer#javaToNative(Object object, TransferData transferData)
98
protected void javaToNative(Object object, TransferData transferData) {
99
if (object instanceof MakeTargetTransferData) {
100
MakeTargetTransferData realData = (MakeTargetTransferData) object;
102
ByteArrayOutputStream out = new ByteArrayOutputStream();
103
DataOutputStream dataOut = new DataOutputStream(out);
104
dataOut.writeInt(realData.getMakeTargetDataList().size());
106
for (MakeTargetData mtd : realData.getMakeTargetDataList()) {
107
dataOut.writeUTF(mtd.getName());
108
dataOut.writeBoolean(mtd.runAllBuilders());
109
dataOut.writeBoolean(mtd.appendProjectEnvironment());
110
dataOut.writeUTF(mtd.getBuildTarget());
111
dataOut.writeUTF(mtd.getBuildCommand());
112
dataOut.writeUTF(mtd.getBuildArguments());
113
dataOut.writeBoolean(mtd.isStopOnError());
114
dataOut.writeBoolean(mtd.isDefaultBuildCmd());
115
dataOut.writeBoolean(mtd.appendEnvironment());
118
super.javaToNative(out.toByteArray(), transferData);
119
} catch (IOException e) {
126
* Converts a platform specific representation of data to a java
129
* @param transferData - the platform specific representation of the data to
132
* @return a java representation of the converted data if the conversion was
133
* successful; otherwise {@code null}. If transferData is {@code
134
* null} then {@code null} is returned. The type of Object that is
135
* returned is dependent on the {@link Transfer} subclass.
137
* @see Transfer#nativeToJava(TransferData transferData)
140
protected Object nativeToJava(TransferData transferData) {
141
byte[] bytes = (byte[]) super.nativeToJava(transferData);
142
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
143
DataInputStream dataIn = new DataInputStream(in);
145
MakeTargetTransferData mttd = new MakeTargetTransferData();
146
int size = dataIn.readInt();
147
for (int i = 0; i < size; i++) {
149
String name = dataIn.readUTF();
150
boolean runAllBuilders = dataIn.readBoolean();
151
boolean appendProjectEnvironment = dataIn.readBoolean();
152
String buildTarget = dataIn.readUTF();
153
String buildCommand = dataIn.readUTF();
154
String buildArguments = dataIn.readUTF();
155
boolean stopOnError = dataIn.readBoolean();
156
boolean useDefaultBuildCmd = dataIn.readBoolean();
157
boolean appendEnvironment = dataIn.readBoolean();
159
mttd.addMakeTarget(name, runAllBuilders, appendProjectEnvironment, buildTarget,
160
buildCommand, buildArguments, stopOnError, useDefaultBuildCmd, appendEnvironment);
163
} catch (IOException e) {