|
Lines 42-49
Link Here
|
| 42 |
private final TaskListView view; |
42 |
private final TaskListView view; |
| 43 |
|
43 |
|
| 44 |
private File[] queryTempFiles; |
44 |
private File[] queryTempFiles; |
|
|
45 |
|
| 45 |
private File[] taskTempFiles; |
46 |
private File[] taskTempFiles; |
| 46 |
|
47 |
|
|
|
48 |
private StructuredSelection selection; |
| 49 |
|
| 47 |
// static final String ID_DATA_TASK_DRAG = "task-drag"; |
50 |
// static final String ID_DATA_TASK_DRAG = "task-drag"; |
| 48 |
|
51 |
|
| 49 |
/** |
52 |
/** |
|
Lines 56-142
Link Here
|
| 56 |
public void dragStart(DragSourceEvent event) { |
59 |
public void dragStart(DragSourceEvent event) { |
| 57 |
StructuredSelection selection = (StructuredSelection) this.view.getViewer().getSelection(); |
60 |
StructuredSelection selection = (StructuredSelection) this.view.getViewer().getSelection(); |
| 58 |
if (selection.isEmpty()) { |
61 |
if (selection.isEmpty()) { |
|
|
62 |
this.selection = null; |
| 59 |
event.doit = false; |
63 |
event.doit = false; |
| 60 |
} else { |
64 |
} else { |
| 61 |
// prepare temporary directory |
65 |
this.selection = selection; |
| 62 |
File tempDir = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + "temp"); |
66 |
} |
| 63 |
if (!tempDir.exists()) { |
67 |
} |
| 64 |
tempDir.mkdir(); |
68 |
|
| 65 |
} |
69 |
private void createFiles(StructuredSelection selection) { |
| 66 |
|
70 |
// prepare temporary directory |
| 67 |
// prepare query files |
71 |
File tempDir = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + "temp"); |
| 68 |
List<AbstractRepositoryQuery> queries = new ArrayList<AbstractRepositoryQuery>(); |
72 |
if (!tempDir.exists()) { |
| 69 |
List<AbstractTask> tasks = new ArrayList<AbstractTask>(); |
73 |
tempDir.mkdir(); |
| 70 |
|
74 |
} |
| 71 |
for (Iterator<?> it = selection.iterator(); it.hasNext();) { |
75 |
|
| 72 |
Object element = it.next(); |
76 |
// prepare query files |
| 73 |
if (element instanceof AbstractRepositoryQuery) { |
77 |
List<AbstractRepositoryQuery> queries = new ArrayList<AbstractRepositoryQuery>(); |
| 74 |
queries.add((AbstractRepositoryQuery) element); |
78 |
List<AbstractTask> tasks = new ArrayList<AbstractTask>(); |
| 75 |
} else if (element instanceof AbstractTask) { |
79 |
|
| 76 |
tasks.add((AbstractTask) element); |
80 |
for (Iterator<?> it = selection.iterator(); it.hasNext();) { |
| 77 |
} |
81 |
Object element = it.next(); |
|
|
82 |
if (element instanceof AbstractRepositoryQuery) { |
| 83 |
queries.add((AbstractRepositoryQuery) element); |
| 84 |
} else if (element instanceof AbstractTask) { |
| 85 |
tasks.add((AbstractTask) element); |
| 78 |
} |
86 |
} |
|
|
87 |
} |
| 88 |
|
| 89 |
try { |
| 79 |
|
90 |
|
| 80 |
try { |
91 |
// queries |
| 81 |
|
92 |
{ |
| 82 |
// queries |
93 |
int counter = 0; |
| 83 |
{ |
94 |
queryTempFiles = new File[queries.size()]; |
| 84 |
int counter = 0; |
95 |
for (AbstractRepositoryQuery query : queries) { |
| 85 |
queryTempFiles = new File[queries.size()]; |
96 |
List<AbstractRepositoryQuery> queryList = new ArrayList<AbstractRepositoryQuery>(); |
| 86 |
for (AbstractRepositoryQuery query : queries) { |
97 |
queryList.add(query); |
| 87 |
List<AbstractRepositoryQuery> queryList = new ArrayList<AbstractRepositoryQuery>(); |
98 |
|
| 88 |
queryList.add(query); |
99 |
String encodedName = "query"; |
| 89 |
|
100 |
try { |
| 90 |
String encodedName = "query"; |
101 |
encodedName = URLEncoder.encode(query.getHandleIdentifier(), |
| 91 |
try { |
102 |
ITasksUiConstants.FILENAME_ENCODING); |
| 92 |
encodedName = URLEncoder.encode(query.getHandleIdentifier(), |
103 |
} catch (UnsupportedEncodingException e) { |
| 93 |
ITasksUiConstants.FILENAME_ENCODING); |
104 |
StatusHandler.fail(e, "Could not determine path for context", false); |
| 94 |
} catch (UnsupportedEncodingException e) { |
|
|
| 95 |
StatusHandler.fail(e, "Could not determine path for context", false); |
| 96 |
} |
| 97 |
|
| 98 |
queryTempFiles[counter] = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, |
| 99 |
tempDir); |
| 100 |
queryTempFiles[counter].deleteOnExit(); |
| 101 |
TasksUiPlugin.getTaskListManager().getTaskListWriter().writeQueries(queryList, |
| 102 |
queryTempFiles[counter]); |
| 103 |
counter++; |
| 104 |
} |
105 |
} |
|
|
106 |
|
| 107 |
queryTempFiles[counter] = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, |
| 108 |
tempDir); |
| 109 |
queryTempFiles[counter].deleteOnExit(); |
| 110 |
TasksUiPlugin.getTaskListManager().getTaskListWriter().writeQueries(queryList, |
| 111 |
queryTempFiles[counter]); |
| 112 |
counter++; |
| 105 |
} |
113 |
} |
|
|
114 |
} |
| 106 |
|
115 |
|
| 107 |
// tasks |
116 |
// tasks |
| 108 |
{ |
117 |
{ |
| 109 |
int counter = 0; |
118 |
int counter = 0; |
| 110 |
taskTempFiles = new File[tasks.size()]; |
119 |
taskTempFiles = new File[tasks.size()]; |
| 111 |
for (AbstractTask task : tasks) { |
120 |
for (AbstractTask task : tasks) { |
| 112 |
String encodedName = "task" + counter; |
121 |
String encodedName = "task" + counter; |
| 113 |
try { |
122 |
try { |
| 114 |
encodedName = URLEncoder.encode(task.getHandleIdentifier(), |
123 |
encodedName = URLEncoder.encode(task.getHandleIdentifier(), ITasksUiConstants.FILENAME_ENCODING); |
| 115 |
ITasksUiConstants.FILENAME_ENCODING); |
124 |
} catch (UnsupportedEncodingException e) { |
| 116 |
} catch (UnsupportedEncodingException e) { |
125 |
StatusHandler.fail(e, "Could not determine path for context", false); |
| 117 |
StatusHandler.fail(e, "Could not determine path for context", false); |
|
|
| 118 |
} |
| 119 |
|
| 120 |
taskTempFiles[counter] = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, |
| 121 |
tempDir); |
| 122 |
taskTempFiles[counter].deleteOnExit(); |
| 123 |
TasksUiPlugin.getTaskListManager().getTaskListWriter().writeTask(task, taskTempFiles[counter]); |
| 124 |
counter++; |
| 125 |
} |
126 |
} |
|
|
127 |
|
| 128 |
taskTempFiles[counter] = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, tempDir); |
| 129 |
taskTempFiles[counter].deleteOnExit(); |
| 130 |
TasksUiPlugin.getTaskListManager().getTaskListWriter().writeTask(task, taskTempFiles[counter]); |
| 131 |
counter++; |
| 126 |
} |
132 |
} |
| 127 |
} catch (IOException e) { |
|
|
| 128 |
StatusHandler.fail(e, "Cannot create a temp query file for Drag&Drop", true); |
| 129 |
} |
133 |
} |
|
|
134 |
} catch (IOException e) { |
| 135 |
StatusHandler.fail(e, "Cannot create a temp query file for Drag&Drop", true); |
| 130 |
} |
136 |
} |
| 131 |
} |
137 |
} |
| 132 |
|
138 |
|
| 133 |
public void dragSetData(DragSourceEvent event) { |
139 |
public void dragSetData(DragSourceEvent event) { |
| 134 |
StructuredSelection selection = (StructuredSelection) this.view.getViewer().getSelection(); |
140 |
if (selection == null || selection.isEmpty()) { |
|
|
141 |
event.doit = false; |
| 142 |
return; |
| 143 |
} |
| 144 |
|
| 145 |
//StructuredSelection selection = (StructuredSelection) this.view.getViewer().getSelection(); |
| 135 |
AbstractTaskContainer selectedElement = null; |
146 |
AbstractTaskContainer selectedElement = null; |
| 136 |
if (((IStructuredSelection) selection).getFirstElement() instanceof AbstractTaskContainer) { |
147 |
if (((IStructuredSelection) selection).getFirstElement() instanceof AbstractTaskContainer) { |
| 137 |
selectedElement = (AbstractTaskContainer) ((IStructuredSelection) selection).getFirstElement(); |
148 |
selectedElement = (AbstractTaskContainer) ((IStructuredSelection) selection).getFirstElement(); |
| 138 |
} |
149 |
} |
| 139 |
|
150 |
|
| 140 |
if (TaskTransfer.getInstance().isSupportedType(event.dataType)) { |
151 |
if (TaskTransfer.getInstance().isSupportedType(event.dataType)) { |
| 141 |
List<AbstractTask> tasks = new ArrayList<AbstractTask>(); |
152 |
List<AbstractTask> tasks = new ArrayList<AbstractTask>(); |
| 142 |
for (Iterator<?> iter = selection.iterator(); iter.hasNext();) { |
153 |
for (Iterator<?> iter = selection.iterator(); iter.hasNext();) { |
|
Lines 147-152
Link Here
|
| 147 |
} |
158 |
} |
| 148 |
event.data = tasks.toArray(); |
159 |
event.data = tasks.toArray(); |
| 149 |
} else if (FileTransfer.getInstance().isSupportedType(event.dataType)) { |
160 |
} else if (FileTransfer.getInstance().isSupportedType(event.dataType)) { |
|
|
161 |
createFiles(selection); |
| 162 |
|
| 150 |
// detect context paths |
163 |
// detect context paths |
| 151 |
String[] taskPaths = new String[taskTempFiles.length]; |
164 |
String[] taskPaths = new String[taskTempFiles.length]; |
| 152 |
for (int i = 0; i < taskTempFiles.length; i++) { |
165 |
for (int i = 0; i < taskTempFiles.length; i++) { |
|
Lines 158-169
Link Here
|
| 158 |
for (int i = 0; i < queryTempFiles.length; i++) { |
171 |
for (int i = 0; i < queryTempFiles.length; i++) { |
| 159 |
queryPaths[i] = queryTempFiles[i].getAbsolutePath(); |
172 |
queryPaths[i] = queryTempFiles[i].getAbsolutePath(); |
| 160 |
} |
173 |
} |
| 161 |
|
174 |
|
| 162 |
// combine paths if needed |
175 |
// combine paths if needed |
| 163 |
String[] paths = new String[taskTempFiles.length + queryTempFiles.length]; |
176 |
String[] paths = new String[taskTempFiles.length + queryTempFiles.length]; |
| 164 |
System.arraycopy(taskPaths, 0, paths, 0, taskTempFiles.length); |
177 |
System.arraycopy(taskPaths, 0, paths, 0, taskTempFiles.length); |
| 165 |
System.arraycopy(queryPaths, 0, paths, taskTempFiles.length, queryTempFiles.length); |
178 |
System.arraycopy(queryPaths, 0, paths, taskTempFiles.length, queryTempFiles.length); |
| 166 |
|
179 |
|
| 167 |
if (paths.length > 0) { |
180 |
if (paths.length > 0) { |
| 168 |
event.data = paths; |
181 |
event.data = paths; |
| 169 |
} |
182 |
} |