4242package com .junichi11 .netbeans .modules .github .issues .issue ;
4343
4444import com .junichi11 .netbeans .modules .github .issues .GitHubIssueState ;
45- import com .junichi11 .netbeans .modules .github .issues .GitHubIssuesConfig ;
4645import com .junichi11 .netbeans .modules .github .issues .repository .GitHubRepository ;
46+ import com .junichi11 .netbeans .modules .github .issues .utils .UiUtils ;
4747import java .beans .PropertyChangeListener ;
4848import java .beans .PropertyChangeSupport ;
4949import java .io .File ;
50- import java .util .Calendar ;
5150import java .util .Collection ;
5251import java .util .Collections ;
5352import java .util .Date ;
5857import javax .swing .JTable ;
5958import org .eclipse .egit .github .core .Comment ;
6059import org .eclipse .egit .github .core .Issue ;
60+ import org .eclipse .egit .github .core .Milestone ;
6161import org .eclipse .egit .github .core .User ;
6262import org .netbeans .modules .bugtracking .commons .UIUtils ;
6363import org .netbeans .modules .bugtracking .issuetable .ColumnDescriptor ;
@@ -190,6 +190,13 @@ public Date getClosed() {
190190 return null ;
191191 }
192192
193+ public Milestone getMilestone () {
194+ if (issue != null ) {
195+ return issue .getMilestone ();
196+ }
197+ return null ;
198+ }
199+
193200 public boolean isFinished () {
194201 if (issue == null ) {
195202 return false ;
@@ -237,8 +244,10 @@ public Issue submitNewIssue(CreateIssueParams params) {
237244 setIssue (newIssue );
238245 // add to cache
239246 repository .addIssue (this );
247+ scheduleInfo = createScheduleInfo ();
240248 fireChange ();
241249 fireDataChange ();
250+ fireScheduleChange ();
242251 }
243252 return newIssue ;
244253 }
@@ -247,6 +256,10 @@ public Issue editIssue(CreateIssueParams params) {
247256 Issue editIssue = repository .editIssue (this , params );
248257 if (editIssue != null ) {
249258 setIssue (editIssue );
259+ scheduleInfo = createScheduleInfo ();
260+ fireChange ();
261+ fireDataChange ();
262+ fireScheduleChange ();
250263 } else {
251264 repository .refresh (this );
252265 }
@@ -291,49 +304,82 @@ public List<Comment> getComments() {
291304 }
292305
293306 // schedule
307+ @ NbBundle .Messages ({
308+ "GitHubIssue.MSG.setSchedule=Set a due date to your milestone"
309+ })
294310 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 ();
311+ UiUtils .showPlainDialog (Bundle .GitHubIssue_MSG_setSchedule ());
312+ // remove ?
313+ // this.scheduleInfo = scheduleInfo;
314+ // if (scheduleInfo == null) {
315+ // // remove schedule
316+ // GitHubIssuesConfig.getInstance().removeSchedule(repository, this);
317+ // } else {
318+ // GitHubIssuesConfig.getInstance().setScheduleDueDate(repository, this, scheduleInfo.getDate());
319+ // GitHubIssuesConfig.getInstance().setScheduleInterval(repository, this, scheduleInfo.getInterval());
320+ // }
321+ // fireDataChange();
322+ // fireScheduleChange();
305323 }
306324
307325 public Date getDueDate () {
308- IssueScheduleInfo info = getSchedule ();
309- if (info == null ) {
326+ String status = getStatus ();
327+ if (status == null || GitHubIssueState . toEnum ( status ) == GitHubIssueState . CLOSED ) {
310328 return null ;
311329 }
312- Calendar calendar = Calendar .getInstance ();
313- Date date = info .getDate ();
314- int interval = info .getInterval ();
315- if (interval < 1 ) {
316- return null ;
330+ Milestone milestone = getMilestone ();
331+ if (milestone != null ) {
332+ return milestone .getDueOn ();
317333 }
318- calendar .setTime (date );
319- calendar .add (Calendar .DATE , interval );
320- return calendar .getTime ();
334+ return null ;
335+
336+ // remove?
337+ // IssueScheduleInfo info = getSchedule();
338+ // if (info == null) {
339+ // return null;
340+ // }
341+ // Calendar calendar = Calendar.getInstance();
342+ // Date date = info.getDate();
343+ // int interval = info.getInterval();
344+ // if (interval < 1) {
345+ // return null;
346+ // }
347+ // calendar.setTime(date);
348+ // calendar.add(Calendar.DATE, interval);
349+ // return calendar.getTime();
321350 }
322351
323352 public IssueScheduleInfo getSchedule () {
353+ String status = getStatus ();
354+ if (status == null || GitHubIssueState .toEnum (status ) == GitHubIssueState .CLOSED ) {
355+ return null ;
356+ }
324357 if (scheduleInfo == null ) {
325- GitHubIssuesConfig config = GitHubIssuesConfig .getInstance ();
326- Date dueDate = config .getScheduleDueDate (repository , this );
327- int interval = config .getScheduleInterval (repository , this );
358+ scheduleInfo = createScheduleInfo ();
359+ }
360+ return scheduleInfo ;
361+ }
362+
363+ private IssueScheduleInfo createScheduleInfo () {
364+ Milestone milestone = getMilestone ();
365+ if (milestone != null ) {
366+ Date dueDate = milestone .getDueOn ();
328367 if (dueDate != null ) {
329- if (interval > 0 ) {
330- scheduleInfo = new IssueScheduleInfo (dueDate , interval );
331- } else {
332- scheduleInfo = new IssueScheduleInfo (dueDate );
333- }
368+ return new IssueScheduleInfo (dueDate , 1 );
334369 }
335370 }
336- return scheduleInfo ;
371+ // XXX remove ?
372+ // GitHubIssuesConfig config = GitHubIssuesConfig.getInstance();
373+ // Date dueDate = config.getScheduleDueDate(repository, this);
374+ // int interval = config.getScheduleInterval(repository, this);
375+ // if (dueDate != null) {
376+ // if (interval > 0) {
377+ // return new IssueScheduleInfo(dueDate, interval);
378+ // } else {
379+ // return new IssueScheduleInfo(dueDate);
380+ // }
381+ // }
382+ return null ;
337383 }
338384
339385 @ NbBundle .Messages ({
0 commit comments