Conference type new item builder and fxml

This commit is contained in:
akasakaisami 2018-05-29 00:50:19 +08:00
parent 60ae2e2ef7
commit 50a700bb39
1 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,125 @@
package org.cutem.cutecalendar.presenter.newitems;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.TextField;
import org.cutem.cutecalendar.model.TodoItem;
import org.cutem.cutecalendar.model.TodoItemFactory;
import org.cutem.cutecalendar.model.TodoItemUtil;
import org.cutem.cutecalendar.util.CalendarUtil;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.Calendar;
public class ConferenceTypeNewItemBuilder extends NewItemBuilder {
public static class Factory implements IFactory {
@Override
public String getTypeName() {
return TYPE_NAME;
}
@Override
public NewItemBuilder construct(@Nullable TodoItem parent) {
return new OtherTypeNewItemBuilder(parent);
}
}
private static final String CONFERENCE_TYPE_LAYOUT = "fxml/newitem_layouts/conference_type_layout.fxml";
private static final int TYPE = TodoItem.CONFERENCE;
private static final String TYPE_NAME = TodoItem.typeName(TYPE);
private ClassLoader mClassLoader = getClass().getClassLoader();
@FXML
private TextField titleText;
@FXML
private TextField bgnTimeText;
@FXML
private TextField endTimeText;
@FXML
private TextField locationText;
@FXML
private TextField descriptionText;
protected ConferenceTypeNewItemBuilder(TodoItem parent) {
super(parent);
FXMLLoader loader = new FXMLLoader();
loader.setLocation(mClassLoader.getResource(CONFERENCE_TYPE_LAYOUT));
loader.setRoot(this);
loader.setController(this);
try {
loader.load();
} catch (IOException e) {
throw new IllegalStateException("cannot load " + CONFERENCE_TYPE_LAYOUT);
}
}
@Override
public @Nullable Object[] buildItem() {
String b = bgnTimeText.getText();
String e = endTimeText.getText();
String title = titleText.getText();
String location = locationText.getText();
String description = descriptionText.getText();
if (title.isEmpty()) { // fail
showAlert("议题还没有填");
return null;
} else if (location.isEmpty()) { // fail
showAlert("地点还没有填");
return null;
} else if (description.isEmpty()) { // fail
showAlert("内容还没有填");
return null;
} else if (b.trim().isEmpty() || e.trim().isEmpty()) {
showAlert("时间段还没有填");
return null;
}
// try build a TodoItem
// failed?
if (!CalendarUtil.isValidCalendarString(b) || !CalendarUtil.isValidCalendarString(e)) {
showAlert("give a valid time");
return null;
}
Calendar c1 = CalendarUtil.constructCalendar(b);
Calendar c2 = CalendarUtil.constructCalendar(e);
// failed?
if (c2.before(c1)) {
showAlert("开始时间在结束时间后");
return null;
}
// build
TodoItemFactory fac = new TodoItemFactory();
fac.type(TYPE).beginTime(c1).endTime(c2).stringProperties(TodoItem.TITLE, title).stringProperties(TodoItem.LOCATION, location).stringProperties(TodoItem.DESCRIPTION, description);
TodoItem item = fac.build();
if (checkConflict(item)) {
if (mParent == null) {
return new Object[]{item};
} else {
TodoItem[] res = TodoItemUtil.bind(mParent, item);
return new Object[]{res[0], res[1]};
}
} else { // fail
return null;
}
}
@Override
public String getTypeName() {
return TYPE_NAME;
}
}