Skip to content

Commit

Permalink
Cleanup of the seeder, moving to a shared iterator to accomodate GeoR…
Browse files Browse the repository at this point in the history
…SS and partial seeding

git-svn-id: http://geowebcache.org/svn/trunk@907 e7b91dd5-889a-44ae-8e97-0abfc27e49b2
  • Loading branch information
Arne Kepp committed Jan 26, 2010
1 parent d664ee3 commit 7005140
Show file tree
Hide file tree
Showing 8 changed files with 517 additions and 252 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,146 @@
package org.geowebcache.layer.updatesource;

public class GeoRSSFeedDefinition extends UpdateSourceDefinition {

String feedUrl;

String gridSetId;

Integer pollInterval;


private String feedUrl;

private String gridSetId;

private Integer pollInterval;

private String mimeFormat;

private Integer seedingThreads;

private Integer maxMaskLevel;

/**
* The maximum zoom level which to create a backing tile mask for to track the tiles affected by
* the feed geometries; defaults to {@code 10}
*
* @return
*/
public int getMaxMaskLevel() {
return maxMaskLevel == null ? 10 : maxMaskLevel.intValue();
}

void setMaxMaskLevel(final int level) {
this.maxMaskLevel = level;
}

public String getMimeFormat() {
return mimeFormat;
}

void setMimeFormat(String mimeFormat) {
this.mimeFormat = mimeFormat;
}

/**
* Number of threads to spawn to seed based on the results of the GeoRSS feed; default to
* {@code 1} if not set
*
* @return
*/
public int getSeedingThreads() {
return seedingThreads == null ? 1 : seedingThreads.intValue();
}

void setSeedingThreads(int seedingThreads) {
this.seedingThreads = seedingThreads;
}

/**
* The URL to the feed. I think we should use templating for parameters,
* so in the initial implementation we search the string for {lastEntryId}
* and replace any occurrences with the actual last entry id.
* The URL to the feed. I think we should use templating for parameters, so in the initial
* implementation we search the string for {lastEntryId} and replace any occurrences with the
* actual last entry id.
*
* @return
*/
public String getFeedUrl() {
return feedUrl;
}


void setFeedUrl(String url) {
this.feedUrl = url;
}

/**
* Grid set for which this feed is valid
*/
public String gridSetId() {
public String getGridSetId() {
return gridSetId;
}


void setGridSetId(String gridSetId) {
this.gridSetId = gridSetId;
}

/**
* Defaults to 60 minutes
* @return the polling interval in seconds
* @return the polling interval in seconds, or {@code -1} to mean polling is disabled
*/
public int pollInterval() {
if(pollInterval != null) {
return pollInterval;
public int getPollInterval() {
if (pollInterval == null) {
return -1;
}
return pollInterval;
}

void setPollInterval(int seconds) {
if (seconds <= 0) {
pollInterval = null;
} else {
pollInterval = seconds;
}
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder("GeoRSS feed[");
sb.append("gridSetId: ").append(gridSetId);
sb.append(", poll interval: ").append(getPollIntervalStr());
sb.append(", feed URL: '").append(feedUrl).append("'");
sb.append(", mime format: ").append(mimeFormat);
sb.append(", seeding threads: ").append(seedingThreads);
sb.append(", max masking level: ").append(maxMaskLevel);
return sb.append("]").toString();
}

/**
* @return human friendly representation of the poll interval
*/
public String getPollIntervalStr() {
return getPollIntervalStr(pollInterval);
}

private String getPollIntervalStr(final Integer pollInterval) {
if (pollInterval == null) {
return "Disabled";
}
final int MINUTE = 60;
final int HOUR = MINUTE * 60;
final int DAY = HOUR * 24;

int interval = pollInterval.intValue();
String pollIntervalStr;
if (interval > DAY) {
int days = interval / DAY;
int remaining = interval % DAY;
pollIntervalStr = days + " Day" + (days > 1 ? "s, " : ", ");
pollIntervalStr += getPollIntervalStr(remaining);
} else if (interval > HOUR) {
int hours = interval / HOUR;
int remaining = interval % HOUR;
pollIntervalStr = hours + " Hour" + (hours > 1 ? "s, " : ", ");
pollIntervalStr += getPollIntervalStr(remaining);
} else if (interval > MINUTE) {
int minutes = interval / MINUTE;
int remaining = interval % MINUTE;
pollIntervalStr = minutes + " Minute" + (minutes > 1 ? "s, " : ", ");
pollIntervalStr += getPollIntervalStr(remaining);
} else {
return 3600;
pollIntervalStr = interval + " Second" + (interval > 1 ? "s" : "");
}
return pollIntervalStr;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import java.util.TreeMap;
import java.util.Map.Entry;

import org.geowebcache.demo.Demo;
import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.layer.TileLayer;
Expand All @@ -35,6 +34,7 @@
import org.geowebcache.rest.RestletException;
import org.geowebcache.rest.GWCTask.TYPE;
import org.geowebcache.storage.StorageBroker;
import org.geowebcache.storage.TileRange;
import org.geowebcache.util.ServletUtils;
import org.restlet.data.Form;
import org.restlet.data.MediaType;
Expand Down Expand Up @@ -466,8 +466,7 @@ private void handleDoSeedPost(Form form, TileLayer tl, Response resp)

String gridSetId = form.getFirst("gridSetId").getValue();

int threadCount = Integer.parseInt(form.getFirst("threadCount")
.getValue());
int threadCount = Integer.parseInt(form.getFirst("threadCount").getValue());
int zoomStart = Integer.parseInt(form.getFirst("zoomStart").getValue());
int zoomStop = Integer.parseInt(form.getFirst("zoomStop").getValue());

Expand All @@ -477,8 +476,13 @@ private void handleDoSeedPost(Form form, TileLayer tl, Response resp)

SeedRequest sr = new SeedRequest(tl.getName(), bounds, gridSetId,
threadCount, zoomStart, zoomStop, format, type, null);

seedRestlet.dispatchTasks(sr, tl, threadPool);

TileRange tr = SeedRestlet.createTileRange(sr, tl);

GWCTask[] tasks = seedRestlet.createTasks(tr, tl, sr.getType(),
sr.getThreadCount(), sr.getFilterUpdate());

seedRestlet.dispatchTasks(tasks);

// Give the thread executor a chance to run
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,13 @@
package org.geowebcache.rest.seed;

import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.grid.SRS;
import org.geowebcache.mime.MimeException;
import org.geowebcache.mime.MimeType;
import org.geowebcache.rest.GWCTask;
import org.geowebcache.rest.GWCTask.TYPE;
import org.geowebcache.storage.TileRange;

public class SeedRequest {
private String name = null;
Expand Down Expand Up @@ -94,8 +98,12 @@ public BoundingBox getBounds() {
* completes.
* @return
*/
public Boolean getFilterUpdate() {
return filterUpdate;
public boolean getFilterUpdate() {
if(filterUpdate != null) {
return filterUpdate;
} else {
return false;
}
}
/**
* Method returns the grid set id for this request
Expand Down Expand Up @@ -165,5 +173,4 @@ public TYPE getType() {
public String getParameters() {
return parameters;
}

}
Loading

0 comments on commit 7005140

Please sign in to comment.