001/*
002 * JGrapes Event Driven Framework
003 * Copyright (C) 2016-2018 Michael N. Lipp
004 * 
005 * This program is free software; you can redistribute it and/or modify it 
006 * under the terms of the GNU Affero General Public License as published by 
007 * the Free Software Foundation; either version 3 of the License, or 
008 * (at your option) any later version.
009 * 
010 * This program is distributed in the hope that it will be useful, but 
011 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
012 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License 
013 * for more details.
014 * 
015 * You should have received a copy of the GNU Affero General Public License along 
016 * with this program; if not, see <http://www.gnu.org/licenses/>.
017 */
018
019package org.jgrapes.io.events;
020
021import java.nio.file.OpenOption;
022import java.nio.file.Path;
023import java.util.Arrays;
024
025/**
026 *
027 */
028public class FileOpened extends Opened<OpenFile> {
029
030    private final Path path;
031    private final OpenOption[] options;
032
033    /**
034     * Instantiates a new event, using the values for path and
035     * options from the opening event. 
036     *
037     * @param event the event that caused opening the file
038     */
039    public FileOpened(OpenFile event) {
040        setResult(event);
041        this.path = event.path();
042        this.options = event.options();
043    }
044
045    /**
046     * Instantiates a new event, overriding the values using the
047     * given values for path and options.
048     *
049     * @param event the event that caused opening the file
050     * @param path the path
051     * @param options the options
052     */
053    public FileOpened(OpenFile event, Path path, OpenOption... options) {
054        setResult(event);
055        this.path = path;
056        this.options = Arrays.copyOf(options, options.length);
057    }
058
059    /**
060     * Returns the event that caused the file to be opened.
061     * 
062     * @return the event
063     */
064    public OpenFile openEvent() {
065        return currentResults().get(0);
066    }
067
068    /**
069     * @return the path
070     */
071    public Path path() {
072        return path;
073    }
074
075    /**
076     * @return the options
077     */
078    public OpenOption[] options() {
079        return Arrays.copyOf(options, options.length);
080    }
081
082}