forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * An action is a change to the OSM-database
 | |
|  * It will generate some new/modified/deleted objects, which are all bundled by the 'changes'-object
 | |
|  */
 | |
| import {Changes} from "../Changes";
 | |
| import {ChangeDescription} from "./ChangeDescription";
 | |
| 
 | |
| export default abstract class OsmChangeAction {
 | |
| 
 | |
|     public readonly trackStatistics: boolean;
 | |
|     /**
 | |
|      * The ID of the object that is the center of this change.
 | |
|      * Null if the action creates a new object (at initialization)
 | |
|      * Undefined if such an id does not make sense
 | |
|      */
 | |
|     public readonly mainObjectId: string;
 | |
|     private isUsed = false
 | |
| 
 | |
|     constructor(mainObjectId: string, trackStatistics: boolean = true) {
 | |
|         this.trackStatistics = trackStatistics;
 | |
|         this.mainObjectId = mainObjectId
 | |
|     }
 | |
| 
 | |
|     public Perform(changes: Changes) {
 | |
|         if (this.isUsed) {
 | |
|             throw "This ChangeAction is already used"
 | |
|         }
 | |
|         this.isUsed = true;
 | |
|         return this.CreateChangeDescriptions(changes)
 | |
|     }
 | |
| 
 | |
|     protected abstract CreateChangeDescriptions(changes: Changes): Promise<ChangeDescription[]>
 | |
| }
 | |
| 
 | |
| export abstract class OsmCreateAction extends OsmChangeAction {
 | |
| 
 | |
|     public newElementId: string
 | |
|     public newElementIdNumber: number
 | |
| 
 | |
| }
 |