| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.nutch.webui.pages.seed; |
| |
| import java.util.Iterator; |
| |
| import org.apache.nutch.webui.model.SeedList; |
| import org.apache.nutch.webui.model.SeedUrl; |
| import org.apache.nutch.webui.pages.AbstractBasePage; |
| import org.apache.nutch.webui.pages.components.CpmIteratorAdapter; |
| import org.apache.nutch.webui.service.SeedListService; |
| import org.apache.wicket.ajax.AjaxRequestTarget; |
| import org.apache.wicket.ajax.markup.html.AjaxLink; |
| import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; |
| import org.apache.wicket.markup.html.WebMarkupContainer; |
| import org.apache.wicket.markup.html.basic.Label; |
| import org.apache.wicket.markup.html.form.Form; |
| import org.apache.wicket.markup.html.form.TextField; |
| import org.apache.wicket.markup.repeater.Item; |
| import org.apache.wicket.markup.repeater.RefreshingView; |
| import org.apache.wicket.model.CompoundPropertyModel; |
| import org.apache.wicket.model.IModel; |
| import org.apache.wicket.model.LoadableDetachableModel; |
| import org.apache.wicket.model.Model; |
| import org.apache.wicket.request.mapper.parameter.PageParameters; |
| import org.apache.wicket.spring.injection.annot.SpringBean; |
| |
| import com.google.common.collect.Lists; |
| |
| /** |
| * This page is for seed urls management |
| * |
| * @author feodor |
| * |
| */ |
| public class SeedPage extends AbstractBasePage<SeedList> { |
| |
| @SpringBean |
| private SeedListService seedListService; |
| |
| private Form<SeedUrl> urlForm; |
| |
| private WebMarkupContainer seedUrlsTable; |
| |
| public SeedPage() { |
| SeedList list = new SeedList(); |
| list.setSeedUrls(Lists.<SeedUrl> newArrayList()); |
| initPage(Model.of(list)); |
| } |
| |
| public SeedPage(final PageParameters parameters) { |
| initPage(new LoadableDetachableModel<SeedList>() { |
| |
| @Override |
| protected SeedList load() { |
| Long seedListId = parameters.get("id").toLongObject(); |
| return seedListService.getSeedList(seedListId); |
| } |
| }); |
| } |
| |
| public void initPage(IModel<SeedList> model) { |
| setModel(new CompoundPropertyModel<>(model)); |
| |
| addBaseForm(); |
| addSeedUrlsList(); |
| addUrlForm(); |
| } |
| |
| private void addBaseForm() { |
| Form<SeedList> form = new Form<SeedList>("seedList", getModel()) { |
| @Override |
| protected void onSubmit() { |
| seedListService.save(getModelObject()); |
| setResponsePage(SeedListsPage.class); |
| } |
| }; |
| form.add(new TextField<String>("name")); |
| add(form); |
| } |
| |
| private void addSeedUrlsList() { |
| seedUrlsTable = new WebMarkupContainer("seedUrlsTable"); |
| seedUrlsTable.setOutputMarkupId(true); |
| |
| RefreshingView<SeedUrl> seedUrls = new RefreshingView<SeedUrl>("seedUrls") { |
| |
| @Override |
| protected Iterator<IModel<SeedUrl>> getItemModels() { |
| return new CpmIteratorAdapter<>(getModelObject().getSeedUrls()); |
| } |
| |
| @Override |
| protected void populateItem(Item<SeedUrl> item) { |
| item.add(new Label("url")); |
| item.add(new AjaxLink<SeedUrl>("delete", item.getModel()) { |
| |
| @Override |
| public void onClick(AjaxRequestTarget target) { |
| deleteSeedUrl(getModelObject()); |
| target.add(seedUrlsTable); |
| } |
| }); |
| } |
| }; |
| seedUrlsTable.add(seedUrls); |
| add(seedUrlsTable); |
| } |
| |
| private void addUrlForm() { |
| urlForm = new Form<>("urlForm", CompoundPropertyModel.of(Model |
| .of(new SeedUrl()))); |
| urlForm.setOutputMarkupId(true); |
| urlForm.add(new TextField<String>("url")); |
| urlForm.add(new AjaxSubmitLink("addUrl", urlForm) { |
| @Override |
| protected void onSubmit(AjaxRequestTarget target, Form<?> form) { |
| addSeedUrl(); |
| urlForm.setModelObject(new SeedUrl()); |
| target.add(urlForm); |
| target.add(seedUrlsTable); |
| } |
| }); |
| add(urlForm); |
| } |
| |
| private void addSeedUrl() { |
| SeedUrl url = urlForm.getModelObject(); |
| SeedList seedList = getModelObject(); |
| url.setSeedList(seedList); |
| seedList.getSeedUrls().add(url); |
| } |
| |
| private void deleteSeedUrl(SeedUrl url) { |
| SeedList seedList = getModelObject(); |
| seedList.getSeedUrls().remove(url); |
| } |
| |
| } |