Skip to content

Commit f47ea3a

Browse files
committed
Merge branch 'nb80'
2 parents 0b05c58 + b9b7fc6 commit f47ea3a

8 files changed

Lines changed: 169 additions & 48 deletions

File tree

Binary file not shown.

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.junichi11</groupId>
55
<artifactId>netbeans-github-issues</artifactId>
6-
<version>0.0.4-SNAPSHOT</version>
6+
<version>0.0.5-SNAPSHOT</version>
77
<packaging>nbm</packaging>
88
<build>
99
<plugins>
@@ -130,9 +130,9 @@
130130
<version>RELEASE80</version>
131131
</dependency>
132132
<dependency>
133-
<groupId>unknown.binary</groupId>
134-
<artifactId>swingx-all-1.6.4</artifactId>
135-
<version>SNAPSHOT</version>
133+
<groupId>org.netbeans.external</groupId>
134+
<artifactId>swingx-0.9.5</artifactId>
135+
<version>RELEASE72</version>
136136
</dependency>
137137
</dependencies>
138138
<properties>

src/main/java/com/junichi11/netbeans/modules/github/issues/GitHubIssues.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
import org.netbeans.modules.bugtracking.issuetable.IssueNode;
5656
import org.netbeans.modules.bugtracking.spi.BugtrackingSupport;
5757
import org.openide.util.RequestProcessor;
58+
import org.pegdown.Extensions;
59+
import org.pegdown.PegDownProcessor;
5860

5961
/**
6062
*
@@ -72,6 +74,7 @@ public final class GitHubIssues {
7274
private GitHubRepositoryProvider repositoryProvider;
7375
private IssueNode.ChangesProvider<GitHubIssue> changesProvider;
7476
private RequestProcessor rp;
77+
private PegDownProcessor pegDownProcessor;
7578
public static final Color OPEN_STATE_COLOR = Color.decode("#6cc644"); // NOI18N
7679
public static final Color CLOSED_STATE_COLOR = Color.decode("#bd2c00"); // NOI18N
7780

@@ -159,4 +162,11 @@ public String getRecentChanges(GitHubIssue issue) {
159162
return changesProvider;
160163
}
161164

165+
public PegDownProcessor getPegDownProcessor() {
166+
if (pegDownProcessor == null) {
167+
pegDownProcessor = new PegDownProcessor(Extensions.ALL);
168+
}
169+
return pegDownProcessor;
170+
}
171+
162172
}

src/main/java/com/junichi11/netbeans/modules/github/issues/issue/GitHubIssue.java

Lines changed: 121 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,13 @@
4242
package com.junichi11.netbeans.modules.github.issues.issue;
4343

4444
import com.junichi11.netbeans.modules.github.issues.GitHubIssueState;
45-
import com.junichi11.netbeans.modules.github.issues.GitHubIssuesConfig;
45+
import com.junichi11.netbeans.modules.github.issues.GitHubIssues;
4646
import com.junichi11.netbeans.modules.github.issues.repository.GitHubRepository;
47+
import com.junichi11.netbeans.modules.github.issues.utils.DateUtils;
48+
import com.junichi11.netbeans.modules.github.issues.utils.UiUtils;
4749
import java.beans.PropertyChangeListener;
4850
import java.beans.PropertyChangeSupport;
4951
import java.io.File;
50-
import java.util.Calendar;
5152
import java.util.Collection;
5253
import java.util.Collections;
5354
import java.util.Date;
@@ -58,6 +59,7 @@
5859
import javax.swing.JTable;
5960
import org.eclipse.egit.github.core.Comment;
6061
import org.eclipse.egit.github.core.Issue;
62+
import org.eclipse.egit.github.core.Milestone;
6163
import org.eclipse.egit.github.core.User;
6264
import org.netbeans.modules.bugtracking.commons.UIUtils;
6365
import org.netbeans.modules.bugtracking.issuetable.ColumnDescriptor;
@@ -68,7 +70,6 @@
6870
import org.netbeans.modules.bugtracking.spi.IssueScheduleProvider;
6971
import org.netbeans.modules.bugtracking.spi.IssueStatusProvider;
7072
import org.openide.util.NbBundle;
71-
import org.pegdown.Extensions;
7273
import org.pegdown.PegDownProcessor;
7374

7475
/**
@@ -119,11 +120,50 @@ public String getDisplayName() {
119120
if (isNew()) {
120121
return Bundle.GitHubIssue_new_issue_displayName();
121122
}
122-
return String.format("%s - %s", issue.getNumber(), issue.getTitle());
123+
return String.format("%s - %s", issue.getNumber(), issue.getTitle()); // NOI18N
123124
}
124125

126+
@NbBundle.Messages({
127+
"GitHubIssue.LBL.assignee=Assignee",
128+
"GitHubIssue.LBL.created=Created",
129+
"GitHubIssue.LBL.createdBy=Created by",
130+
"GitHubIssue.LBL.dueDate=Due date",
131+
"GitHubIssue.LBL.milestone=Milestone"
132+
})
125133
public String getTooltip() {
126-
return String.format("%s [%s/%s]", getDisplayName(), repository.getRepositoryAuthor(), repository.getRepositoryName()); // NOI18N
134+
// XXX improve
135+
StringBuilder sb = new StringBuilder();
136+
String title = String.format("%s [%s]", getDisplayName(), repository.getFullName()); // NOI18N
137+
sb.append("<html>"); // NOI18N
138+
sb.append("<b>").append(title).append("</b>"); // NOI18N
139+
sb.append("<hr>"); // NOI18N
140+
Date created = getCreated();
141+
Date dueDate = getDueDate();
142+
User assignee = getAssignee();
143+
User createdUser = getCreatedUser();
144+
Milestone milestone = getMilestone();
145+
if (created != null) {
146+
sb.append(Bundle.GitHubIssue_LBL_created()).append(" : ") // NOI18N
147+
.append(DateUtils.DEFAULT_DATE_FORMAT.format(created)).append("<br>"); // NOI18N
148+
}
149+
if (dueDate != null) {
150+
sb.append(Bundle.GitHubIssue_LBL_dueDate()).append(" : ") // NOI18N
151+
.append(DateUtils.DEFAULT_DATE_FORMAT.format(dueDate)).append("<br>"); // NOI18N
152+
}
153+
if (createdUser != null) {
154+
sb.append(Bundle.GitHubIssue_LBL_createdBy()).append(" : ") // NOI18N
155+
.append(createdUser.getLogin()).append("<br>"); // NOI18N
156+
}
157+
if (assignee != null) {
158+
sb.append(Bundle.GitHubIssue_LBL_assignee()).append(" : ") // NOI18N
159+
.append(assignee.getLogin()).append("<br>"); // NOI18N
160+
}
161+
if (milestone != null) {
162+
sb.append(Bundle.GitHubIssue_LBL_milestone()).append(" : ") // NOI18N
163+
.append(milestone.getTitle()).append("<br>"); // NOI18N
164+
}
165+
sb.append("</html>"); // NOI18N
166+
return sb.toString();
127167
}
128168

129169
public boolean isNew() {
@@ -190,6 +230,13 @@ public Date getClosed() {
190230
return null;
191231
}
192232

233+
public Milestone getMilestone() {
234+
if (issue != null) {
235+
return issue.getMilestone();
236+
}
237+
return null;
238+
}
239+
193240
public boolean isFinished() {
194241
if (issue == null) {
195242
return false;
@@ -237,8 +284,10 @@ public Issue submitNewIssue(CreateIssueParams params) {
237284
setIssue(newIssue);
238285
// add to cache
239286
repository.addIssue(this);
287+
scheduleInfo = createScheduleInfo();
240288
fireChange();
241289
fireDataChange();
290+
fireScheduleChange();
242291
}
243292
return newIssue;
244293
}
@@ -247,6 +296,10 @@ public Issue editIssue(CreateIssueParams params) {
247296
Issue editIssue = repository.editIssue(this, params);
248297
if (editIssue != null) {
249298
setIssue(editIssue);
299+
scheduleInfo = createScheduleInfo();
300+
fireChange();
301+
fireDataChange();
302+
fireScheduleChange();
250303
} else {
251304
repository.refresh(this);
252305
}
@@ -260,7 +313,7 @@ public Comment editComment(Comment comment, String editedBody) {
260313
comment.setBody(editedBody);
261314
Comment editComment = GitHubIssueSupport.editComment(getRepository(), comment);
262315
if (editComment != null) {
263-
PegDownProcessor processor = new PegDownProcessor(Extensions.FENCED_CODE_BLOCKS);
316+
PegDownProcessor processor = GitHubIssues.getInstance().getPegDownProcessor();
264317
String body = editComment.getBody();
265318
String bodyHtml = processor.markdownToHtml(body);
266319
comment.setBodyHtml(String.format("<html>%s</html>", bodyHtml)); // NOI18N
@@ -291,49 +344,82 @@ public List<Comment> getComments() {
291344
}
292345

293346
// schedule
347+
@NbBundle.Messages({
348+
"GitHubIssue.MSG.setSchedule=Set a due date to your milestone"
349+
})
294350
public void setSchedule(IssueScheduleInfo scheduleInfo) {
295-
this.scheduleInfo = scheduleInfo;
296-
if (scheduleInfo == null) {
297-
// remove schedule
298-
GitHubIssuesConfig.getInstance().removeSchedule(repository, this);
299-
} else {
300-
GitHubIssuesConfig.getInstance().setScheduleDueDate(repository, this, scheduleInfo.getDate());
301-
GitHubIssuesConfig.getInstance().setScheduleInterval(repository, this, scheduleInfo.getInterval());
302-
}
303-
fireDataChange();
304-
fireScheduleChange();
351+
UiUtils.showPlainDialog(Bundle.GitHubIssue_MSG_setSchedule());
352+
// remove ?
353+
// this.scheduleInfo = scheduleInfo;
354+
// if (scheduleInfo == null) {
355+
// // remove schedule
356+
// GitHubIssuesConfig.getInstance().removeSchedule(repository, this);
357+
// } else {
358+
// GitHubIssuesConfig.getInstance().setScheduleDueDate(repository, this, scheduleInfo.getDate());
359+
// GitHubIssuesConfig.getInstance().setScheduleInterval(repository, this, scheduleInfo.getInterval());
360+
// }
361+
// fireDataChange();
362+
// fireScheduleChange();
305363
}
306364

307365
public Date getDueDate() {
308-
IssueScheduleInfo info = getSchedule();
309-
if (info == null) {
366+
String status = getStatus();
367+
if (status == null || GitHubIssueState.toEnum(status) == GitHubIssueState.CLOSED) {
310368
return null;
311369
}
312-
Calendar calendar = Calendar.getInstance();
313-
Date date = info.getDate();
314-
int interval = info.getInterval();
315-
if (interval < 1) {
316-
return null;
370+
Milestone milestone = getMilestone();
371+
if (milestone != null) {
372+
return milestone.getDueOn();
317373
}
318-
calendar.setTime(date);
319-
calendar.add(Calendar.DATE, interval);
320-
return calendar.getTime();
374+
return null;
375+
376+
// remove?
377+
// IssueScheduleInfo info = getSchedule();
378+
// if (info == null) {
379+
// return null;
380+
// }
381+
// Calendar calendar = Calendar.getInstance();
382+
// Date date = info.getDate();
383+
// int interval = info.getInterval();
384+
// if (interval < 1) {
385+
// return null;
386+
// }
387+
// calendar.setTime(date);
388+
// calendar.add(Calendar.DATE, interval);
389+
// return calendar.getTime();
321390
}
322391

323392
public IssueScheduleInfo getSchedule() {
393+
String status = getStatus();
394+
if (status == null || GitHubIssueState.toEnum(status) == GitHubIssueState.CLOSED) {
395+
return null;
396+
}
324397
if (scheduleInfo == null) {
325-
GitHubIssuesConfig config = GitHubIssuesConfig.getInstance();
326-
Date dueDate = config.getScheduleDueDate(repository, this);
327-
int interval = config.getScheduleInterval(repository, this);
398+
scheduleInfo = createScheduleInfo();
399+
}
400+
return scheduleInfo;
401+
}
402+
403+
private IssueScheduleInfo createScheduleInfo() {
404+
Milestone milestone = getMilestone();
405+
if (milestone != null) {
406+
Date dueDate = milestone.getDueOn();
328407
if (dueDate != null) {
329-
if (interval > 0) {
330-
scheduleInfo = new IssueScheduleInfo(dueDate, interval);
331-
} else {
332-
scheduleInfo = new IssueScheduleInfo(dueDate);
333-
}
408+
return new IssueScheduleInfo(dueDate, 1);
334409
}
335410
}
336-
return scheduleInfo;
411+
// XXX remove ?
412+
// GitHubIssuesConfig config = GitHubIssuesConfig.getInstance();
413+
// Date dueDate = config.getScheduleDueDate(repository, this);
414+
// int interval = config.getScheduleInterval(repository, this);
415+
// if (dueDate != null) {
416+
// if (interval > 0) {
417+
// return new IssueScheduleInfo(dueDate, interval);
418+
// } else {
419+
// return new IssueScheduleInfo(dueDate);
420+
// }
421+
// }
422+
return null;
337423
}
338424

339425
@NbBundle.Messages({

src/main/java/com/junichi11/netbeans/modules/github/issues/issue/ui/AttributesViewPanel.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,18 @@
4141
*/
4242
package com.junichi11.netbeans.modules.github.issues.issue.ui;
4343

44+
import com.junichi11.netbeans.modules.github.issues.utils.DateUtils;
4445
import java.awt.Color;
4546
import java.awt.Font;
47+
import java.util.Date;
4648
import java.util.List;
4749
import javax.swing.JLabel;
4850
import javax.swing.border.EmptyBorder;
4951
import org.eclipse.egit.github.core.Issue;
5052
import org.eclipse.egit.github.core.Label;
5153
import org.eclipse.egit.github.core.Milestone;
5254
import org.eclipse.egit.github.core.User;
55+
import org.openide.util.NbBundle;
5356

5457
/**
5558
*
@@ -70,6 +73,9 @@ public AttributesViewPanel() {
7073
milestoneNameLabel.setFont(bold);
7174
}
7275

76+
@NbBundle.Messages({
77+
"AttributesViewPanel.LBL.dueDate=Due date"
78+
})
7379
public void setAttributes(Issue issue) {
7480
initAttributes();
7581
if (issue == null) {
@@ -88,7 +94,23 @@ public void setAttributes(Issue issue) {
8894
Milestone milestone = issue.getMilestone();
8995
if (milestone != null) {
9096
milestoneNameLabel.setText(milestone.getTitle());
91-
milestoneNameLabel.setToolTipText(milestone.getDescription());
97+
98+
// tooptip
99+
Date dueDate = milestone.getDueOn();
100+
String description = milestone.getDescription();
101+
StringBuilder sb = new StringBuilder();
102+
sb.append("<html>"); // NOI18N
103+
if (description == null) {
104+
description = ""; // NOI18N
105+
}
106+
description = description.replaceAll("\n", "<br>"); // NOI18N
107+
if (dueDate != null) {
108+
sb.append(Bundle.AttributesViewPanel_LBL_dueDate()).append(" : ").append(DateUtils.DEFAULT_DATE_FORMAT.format(dueDate)).append("<br>"); // NOI18N
109+
sb.append("<hr>"); // NOI18N
110+
}
111+
sb.append(description);
112+
sb.append("</html>"); // NOI18N
113+
milestoneNameLabel.setToolTipText(sb.toString());
92114
}
93115

94116
List<Label> labels = issue.getLabels();

src/main/java/com/junichi11/netbeans/modules/github/issues/issue/ui/CommentTabbedPanel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@
4141
*/
4242
package com.junichi11.netbeans.modules.github.issues.issue.ui;
4343

44+
import com.junichi11.netbeans.modules.github.issues.GitHubIssues;
4445
import java.awt.Component;
4546
import java.awt.Dialog;
4647
import org.openide.DialogDescriptor;
4748
import org.openide.DialogDisplayer;
48-
import org.pegdown.Extensions;
4949
import org.pegdown.PegDownProcessor;
5050

5151
/**
@@ -176,7 +176,8 @@ public void stateChanged(javax.swing.event.ChangeEvent evt) {
176176
private void commentTabbedPaneStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_commentTabbedPaneStateChanged
177177
Component selectedComponent = commentTabbedPane.getSelectedComponent();
178178
if (selectedComponent == commentPreviewPanel) {
179-
String html = new PegDownProcessor(Extensions.FENCED_CODE_BLOCKS).markdownToHtml(commentWriteTextArea.getText());
179+
PegDownProcessor processor = GitHubIssues.getInstance().getPegDownProcessor();
180+
String html = processor.markdownToHtml(commentWriteTextArea.getText());
180181
commentPreviewEditorPane.setText(html);
181182
}
182183
}//GEN-LAST:event_commentTabbedPaneStateChanged

src/main/java/com/junichi11/netbeans/modules/github/issues/issue/ui/GitHubIssuePanel.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@
8383
import org.openide.util.ImageUtilities;
8484
import org.openide.util.NbBundle;
8585
import org.openide.util.RequestProcessor;
86-
import org.pegdown.Extensions;
8786
import org.pegdown.PegDownProcessor;
8887

8988
/**
@@ -240,7 +239,7 @@ public void update() {
240239
// add comments
241240
commentsPanel.removeAllComments();
242241
List<Comment> comments = gitHubIssue.getComments();
243-
PegDownProcessor processor = new PegDownProcessor(Extensions.FENCED_CODE_BLOCKS);
242+
PegDownProcessor processor = GitHubIssues.getInstance().getPegDownProcessor();
244243
for (Comment comment : comments) {
245244
String body = comment.getBody();
246245
String bodyHtml = processor.markdownToHtml(body);

0 commit comments

Comments
 (0)