set URL when inferring type

This commit is contained in:
ucrhh 2021-02-03 11:09:14 +01:00
parent 02f10158d6
commit cc400fc314
3 changed files with 31 additions and 18 deletions

View File

@ -13,6 +13,7 @@ import edu.kit.typicalc.model.parser.ParseError;
import edu.kit.typicalc.presenter.Presenter;
import edu.kit.typicalc.view.content.infocontent.StartPageView;
import edu.kit.typicalc.view.content.typeinferencecontent.TypeInferenceView;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
@ -35,14 +36,13 @@ public class MainViewImpl extends AppLayout implements MainView, HasErrorParamet
private final UpperBar upperBar;
private String termToType = "x"; //todo replace with real value
/**
* Creates a new MainViewImpl.
*/
public MainViewImpl() {
setDrawerOpened(false);
MainViewListener presenter = new Presenter(new ModelImpl(), this);
upperBar = new UpperBar(presenter, this::setContent);
upperBar = new UpperBar(presenter, this::setContent, this::setTermInURL);
addToNavbar(upperBar);
addToDrawer(new DrawerContent());
}
@ -50,7 +50,6 @@ public class MainViewImpl extends AppLayout implements MainView, HasErrorParamet
@Override
public void setTypeInferenceView(final TypeInfererInterface typeInferer) {
TypeInferenceView tiv = new TypeInferenceView(typeInferer);
UI.getCurrent().getPage().getHistory().replaceState(null, new Location(ROUTE + SLASH + termToType));
setContent(tiv);
}
@ -70,14 +69,20 @@ public class MainViewImpl extends AppLayout implements MainView, HasErrorParamet
List<String> segments = event.getLocation().getSegments();
String term = segments.get(segments.size() - 1);
upperBar.inferTerm(decodeURL(term));
return HttpServletResponse.SC_OK;
} else if (event.getLocation().getPath().equals(ROUTE)) {
setContent(new StartPageView());
upperBar.inferTerm(StringUtils.EMPTY);
} else if (event.getLocation().getPath().equals("")) {
setContent(new StartPageView());
return HttpServletResponse.SC_OK;
} else {
setContent(new NotFoundView(event));
setContent(new NotFoundView());
return HttpServletResponse.SC_NOT_FOUND;
}
return HttpServletResponse.SC_OK;
}
protected void setTermInURL(String lambdaTerm) {
UI.getCurrent().getPage().getHistory().replaceState(null, new Location(ROUTE + SLASH + lambdaTerm));
}
private String decodeURL(String encodedUrl) {

View File

@ -1,17 +1,18 @@
package edu.kit.typicalc.view.main;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.BeforeEnterEvent;
import com.vaadin.flow.router.ParentLayout;
@ParentLayout(MainViewImpl.class)
public class NotFoundView extends VerticalLayout {
public NotFoundView(BeforeEnterEvent event) {
Label error = new Label(event.getLocation().getPath());
add(error);
public NotFoundView() {
H1 error404 = new H1("404 - Not found");
H2 suggestion = new H2("Try \"/infer/<term>\" or type your favourite term into the input field");
add(error404, suggestion); // todo make beautiful
setAlignItems(Alignment.CENTER);
}
}

View File

@ -10,6 +10,7 @@ import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.router.Location;
import edu.kit.typicalc.view.content.infocontent.StartPageView;
import edu.kit.typicalc.view.main.MainView.MainViewListener;
import org.apache.commons.lang3.StringUtils;
@ -40,16 +41,21 @@ public class UpperBar extends HorizontalLayout {
private final transient MainViewListener presenter;
private final transient Consumer<Component> setContent;
private final transient Consumer<String> setTermInURL;
/**
* Initializes a new UpperBar with the provided mainViewListener.
*
* @param presenter the listener used to communicate with the model
* @param setContent function to set the content of the application
* @param setTermInURL function to set the term into the URL
*/
protected UpperBar(final MainViewListener presenter, final Consumer<Component> setContent) {
protected UpperBar(final MainViewListener presenter, final Consumer<Component> setContent,
final Consumer<String> setTermInURL) {
this.presenter = presenter;
this.setContent = setContent;
this.setTermInURL = setTermInURL;
this.viewTitle = new H1(getTranslation("root.typicalc"));
viewTitle.addClickListener(event -> routeToStartPage());
@ -74,17 +80,18 @@ public class UpperBar extends HorizontalLayout {
* @param lambdaString the lambda term to be type-inferred
*/
protected void typeInfer(final String lambdaString) {
inputBar.reset(); //TODO should term remain in input field?
// inputBar.reset(); //TODO should term remain in input field?
setTermInURL.accept(lambdaString);
presenter.typeInferLambdaString(lambdaString, new HashMap<>());
if (lambdaString.equals(StringUtils.EMPTY)) {
routeToStartPage();
}
// todo ich finde es ohne Wechsel auf Startseite besser, man bekommt ja schon ne Warnung
// if (lambdaString.equals(StringUtils.EMPTY)) {
// routeToStartPage();
// }
}
private void routeToStartPage() {
setContent.accept(new StartPageView());
UI.getCurrent().getPage().getHistory().replaceState(null, StringUtils.EMPTY);
UI.getCurrent().getPage().getHistory().replaceState(null, new Location(StringUtils.EMPTY));
}
private void onHelpIconClick() {